为什么用`OR`对照多个值检查变量仅检查第一个值?
我想检查一个变量是否具有多个值之一。我对为什么or
在这种情况下不起作用感到困惑。我正在按照给出该示例的教程进行操作if (a or
b):
,但是当我尝试执行此操作时,它只会根据第一个值检查变量。我的支票怎么了?
name = raw_input('Please type in your name:')
if len(name) < 5:
print "Your name has fewer than 5 characters"
elif len(name) == 5:
print "Your name has exactly 5 characters"
if name == ("Jesse" or "jesse"):
print "Hey Jesse!"
else:
print "Your name has greater than 5 characters"
-
(“Jesse” or “jesse”)
上面的表达式测试是否
"Jesse"
评估为True
。如果是这样,则表达式将返回它;否则,它将返回"jesse"
。该表达式等同于编写:"Jesse" if "Jesse" else "jesse"
因为
"Jesse"
是一个非空字符串,所以它将 始终 求值为True
并因此返回:>>> bool("Jesse") # Non-empty strings evaluate to True in Python True >>> bool("") # Empty strings evaluate to False False >>> >>> ("Jesse" or "jesse") 'Jesse' >>> ("" or "jesse") 'jesse' >>>
这意味着表达式:
name == ("Jesse" or "jesse")
基本上等同于编写此代码:
name == "Jesse"
为了解决您的问题,您可以使用
in
运算符:# Test whether the value of name can be found in the tuple ("Jesse", "jesse") if name in ("Jesse", "jesse"):
或者,您可以小写
name
with的值,str.lower
然后将其"jesse"
直接与进行比较:# This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc. if name.lower() == "jesse":