3

AKA 的正确版本:

if ['hi', 'hello', 'greetings'] in userMessage:
    print('Hello!')

我尝试了上面显示的内容,但它说它不能使用列表,它必须使用单个字符串。如果我将数组设置为对象/变量,同样的事情。如果我使用“或”,它似乎并不完全有效。

4

3 回答 3

8

如果目标只是说明是否有任何已知列表出现在 中userMessage,并且您不在乎它是哪一个,请与生成器表达式一起使用any

if any(srchstr in userMessage for srchstr in ('hi', 'hello', 'greetings')):

当它被击中时会短路,所以如果hi出现在输入中,它不会检查其余的,并立即返回True

如果必须将单词作为单个单词找到(因此userMessage = "This"应该是错误的,即使hi出现在其中),则使用:

if not {'hi', 'hello', 'greetings'}.isdisjoint(userMessage.split()):

它也会短路,但方式不同;它迭代userMessage.split()直到它匹配关键字之一,然后停止并返回Falsenot翻转到)True,仅当没有单词匹配关键字时才返回True(翻转到)。Falsenot

于 2016-01-05T01:37:46.470 回答
2

你可以做:

found = set(['hi','hello','greetings']) & set(userMessage.split())
for obj in found:
    print found

如果您也在寻找多个单词

于 2016-01-05T01:01:28.160 回答
0

您还可以使用 Set 比较多个元素:

if set(['hi', 'hello', 'greetings']) <= set(userMessage.split()):
   print("Hello!")

但是要小心使用 split(),一旦它不会避免标点符号。因此,如果您的 userMessage 类似于“嗨,你好,问候”。它会将单词与 ["hi,", "hello,", "greetings."] 进行比较

于 2016-01-05T02:09:13.157 回答