为什么用`OR`对照多个值检查变量仅检查第一个值?

发布于 2021-01-29 17:52:34

我想检查一个变量是否具有多个值之一。我对为什么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"
关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    (“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"):
    

    或者,您可以小写namewith的值,str.lower然后将其"jesse"直接与进行比较:

    # This will also handle inputs such as "JeSSe", "jESSE", "JESSE", etc.
    if name.lower() == "jesse":
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看