2016-01-05 1 views
2

AKA правильная версия этого:Проверьте вход Python содержит список ключевых слов

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

Я пытался что показал выше, но он говорит, что не может использовать списки, он должен использовать одну строку. То же самое, если я задаю массив объекту/переменной. Если я использую «или», он, похоже, не работает вообще.

+3

Вы хотите, чтобы это было наоборот .. 'if userMessage в ['hi', 'hello', 'greetings' ]: ' –

+0

Перевести его логически. Если 'message' в некотором списке сообщений. Не сложнее, чем это. –

+0

Это следует по-английски .. 'if item в listOfItems:' –

ответ

4

Если цель просто сказать, если какой-либо из известного списка появляется в userMessage, и вы не все равно, какая она есть, use any с generator expression:

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

это будет короткое замыкание, когда он получает удар, так что если hi появляется на входе, он не проверяет остальное и сразу возвращает True.

2

Вы можете сделать:

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

, если вы ищете несколько слов, а

+1

'set' уже встроенный тип Python. Просто используйте 'set (lst)', а затем множество пересечений - хороший способ пойти на это. –

+1

Кроме того, еще до того, как я дам ему «+1», вы получите правильный ответ, строка, содержащая один из фрагментов кода, имеет SyntaxError из-за хвоста ':' –

0

Вы также можете сравнить несколько элементов с помощью Set:

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

Но будьте осторожны, чтобы использовать раскол() после того, как он не будет избегать ponctuation. Итак, если ваш userMessage - это что-то вроде привет, привет, привет. он будет сравнивать слова с [«привет», «привет», «привет».]