检查所有变量之一是否为空

Mar*_*kum 3 python variables

def ask():
    global name, loca

    print "What's your name?"
    name = raw_input('> ')
    print "Where are you from?"
    loca = raw_input('> ')

    if name or loca == None:
        print "Please enter valid details."
        ask()

ask()
print "Alright, so you're " + name + ", from " + loca + "."
Run Code Online (Sandbox Code Playgroud)

使用此脚本,如果我的两个变量都为空,它将只打印最后一行.如果我填写其中一个或两个,它会触发它if,让我重做该功能.

我在这做错了什么?

sle*_*ica 11

你已经很好地孤立了这个问题:

if name or loca == None:
Run Code Online (Sandbox Code Playgroud)

在这里你认为它说:

"If either name or loca equal none:"
Run Code Online (Sandbox Code Playgroud)

但相反它说:

"if (name) is true or (loca equals None) is true:"
Run Code Online (Sandbox Code Playgroud)

应该说的地方:

"if (name equals none) is true or (loca equals none) is true:"
Run Code Online (Sandbox Code Playgroud)

这是:

if name is None or loca is None:
Run Code Online (Sandbox Code Playgroud)

顺便说一下is,由于只有一个None对象,因此可以更好地执行无比较.

此外,更加pythonic的方式是:

if not all((name, loca)):
Run Code Online (Sandbox Code Playgroud)

或者,视为"全部",它只是2个变量:

if not (name and loca):
Run Code Online (Sandbox Code Playgroud)

如果您不理解,请仔细阅读(Python教程非常好 - 请参阅条件部分).祝好运!