为什么使用 `OR` 来检查一个变量是否符合多个值时,只会检查第一个值?

2024-06-02 10:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一个变量是否有多个值之一。我不明白为什么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"

Tags: orname示例yourrawlenif情况
3条回答
("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"

为了解决问题,可以使用^{} operator

# Test whether the value of name can be found in the tuple ("Jesse", "jesse")
if name in ("Jesse", "jesse"):

或者,可以用^{}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")操作时基本上不测试'jesse',因为它只测试与'Jesse'相等,而不测试'jesse',如您所观察到的。

如果为真,则or运算符返回第一个操作数,否则返回第二个操作数。所以在您的例子中,您的测试相当于if name == "Jesse"

or的正确应用是:

if (name == "Jesse") or (name == "jesse"):

相关问题 更多 >