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教程非常好 - 请参阅条件部分).祝好运!