12

我试图让一个 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
4

2 回答 2

13

你想做的是

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 中的大多数东西都会计算为True(除了False,None或空字符串、列表、字典等)。or接受两件事并将它们评估为布尔值。所以user_input == "look" or "look around"被视为(user_input == "look") or "look_around"; 如果第一个是假的,就像你写的那样if "look_around":,它总是会通过。

于 2012-09-08T23:51:39.727 回答
3

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

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

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

于 2012-09-08T23:52:37.973 回答