【问题标题】:Multiple conditions with if/elif statements [duplicate]if / elif语句的多个条件[重复]
【发布时间】:2012-09-02 08:34:16
【问题描述】:

我试图让 if 语句从多个条件触发,而无需使用不同的触发器多次重写该语句。例如:

if user_input == "look":  
    print description


if user_input == "look around":
    print description

你会如何将这些浓缩成一个陈述?

我尝试使用“或”,它导致任何 raw_input 触发语句,无论输入是否匹配任一条件。

if user_input == "look" or "look around":  
    print description

【问题讨论】:

    标签: python python-2.7 if-statement


    【解决方案1】:

    你想要做的是

    if user_input == "look" or user_input == "look around":
        print description
    

    如果您有很多可能性,另一种选择:

    if user_input in ("look", "look around"):
        print description
    

    由于您使用的是 2.7,您也可以这样写(在 2.7 或 3+ 中有效,但在 2.6 或更低版本中无效):

    if user_input in {"look", "look around"}:
        print description
    

    这会为您的元素创建一个set,这样搜索起来会稍微快一些(尽管这仅在您检查的元素数量远大于 2 时才重要)。


    您第一次尝试总是通过的原因是这个。 Python 中的大多数东西都评估为TrueFalseNone 或空字符串、列表、字典等除外)。 or 接受两件事并将它们评估为布尔值。所以user_input == "look" or "look around" 被视为(user_input == "look") or "look_around";如果第一个是假的,就像你写了if "look_around":,它总是会通过。

    【讨论】:

    • 谢谢杜格尔!真是愚蠢的问题!
    • @Blaine 这是许多新程序员在 Python 中遇到的问题;它看起来就像它正在做你想让它做的事情,但是,它没有。 :) 希望我对它为何如此运作的解释是有道理的。
    • 啊,这就解释了。一直在学习我的逻辑表,所以我明白了! :)
    【解决方案2】:

    您可以使用正则表达式来匹配字符串,如果它们遵循一个模式 可选部分,或者您可以进行数组查找:

    if user_input in ["look", "look around"]:
        print description
    

    布尔运算符or 仅适用于布尔值,它计算表达式 如果表达式之一的计算结果为True,则返回True。 它与自然语言无关'

    【讨论】: