为什么用`OR`检查variables对多个值只检查第一个值?
我想检查一个variables是否有多个值中的一个。 我很困惑为什么or
不在这种情况下工作。 我正在按照if (a or b):
提供示例的教程if (a or b):
但是当我尝试这样做时,它只会根据第一个值检查variables。 我的支票有什么问题?
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")
以上expression式testing"Jesse"
是否评估为True
。 如果是这样,那么expression式会返回它; 否则,将返回"jesse"
。 这个expression等同于写作:
"Jesse" if "Jesse" else "jesse"
因为"Jesse"
虽然是一个非空string,它总是会计算为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' >>>
这意味着expression式:
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"):
或者,你可以用str.lower
来小写name
的值,然后直接将它与"jesse"
比较:
# This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc. if name.lower() == "jesse":
if name in ("Jesse", "jesse"):
将是正确的方法来做到这一点。
虽然,如果你想使用or
,声明将是
if name == 'Jesse' or name == 'jesse':
>>> ("Jesse" or "jesse") 'Jesse'
评估为'Jesse'
,所以当你做if name == ("Jesse" or "jesse")
,因为它只testing平等'Jesse'
而不是testing'Jesse'
'jesse'
,正如你所观察到的。
or
运算符返回第一个操作数,如果它是真的,否则返回第二个操作数。 所以在你的情况下,你的testing相当于if name == "Jesse"
。
正确的应用or
将是:
if (name == "Jesse") or (name == "jesse"):
如果你想不区分大小写的比较,请使用lower
或upper
:
if name.lower() == "jesse":