为什么用`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"): 

如果你想不区分大小写的比较,请使用lowerupper

 if name.lower() == "jesse":