2015-08-12 7 views
1

Так что я пытаюсь использовать функцию любого() для поиска через введенный пользователем строки и посмотреть, если он содержит какие-либо элементы из списка:Ошибка при проверке, содержит ли строка элемент из списка в Python?

# takes the user input 
i = raw_input(">>> ") 
e = i.lower() 
af.inp.append(e) 

# greeting section 
if any(x in e for x in af.x): 
    af.greeting() 

Список:

x = ["hello", "hi", "hey"] # greetings 

Так в основном У меня возникла проблема: если я ввожу какую-либо строку, содержащую любые символы, найденные в списке, она вернет функцию приветствия ...

Это проблема, когда я вижу «Shit», а не «Hi» он будет запускать функцию приветствия. Я думаю, что я могу использовать неправильную функцию для поиска конкретных целых слов или строк, найденных в введенном пользователем тексте, а не в части слова: например. «S'hi't», а не «Привет».

Кто-нибудь знает об этом или, если есть другой способ, я могу искать целые слова или строки?

p.s. Просто для того, чтобы уточнить, я понимаю, почему это происходит с использованием любой функции, которую мне просто интересно. Если есть какой-либо способ вокруг этого или другого метода все вместе.

+0

Вы собираетесь должны объяснить, что 'af',' 'af.inp' и af.x' есть. –

+0

«af» - это модуль, содержащий все списки, через которые я запускаю ... af.x - это список, содержащий все приветственные слова (я включил эту часть кода в исходный комментарий), а af.inp - список что я нажимаю на ввод пользователя, чтобы сохранить его. –

+0

Ничего важного для вопроса. Зачем его включать? –

ответ

2

Если вы тусклый, чтобы проверить наличие ваших слов в списке x так что вам нужно разделить ваш вход затем использовать any:

i = raw_input(">>> ") 
e = i.lower().split() 
af.inp.append(e) 

# greeting section 
if any(x in e for x in af.x): 
    af.greeting() 

Или вы можете просто положить ваши слова в set объекта и использования set.intersection метод:

x = {"hello", "hi", "hey"} 
if x.intersections(af.x): 
    af.greeting() 
+0

Теперь, когда я пытаюсь ввести слово, не содержащее символов из списка приветствия, я получаю эту ошибку: Traceback (последний последний звонок): Файл «main.py», строка 30, в elif e in af.wu : ТипError: unhashable type: 'list' –

+0

Nevermind исправил ошибку благодаря помощи! –

+0

@TreyTaylor Как вы это сделали? эта ошибка возникает, когда вы используете список в объекте 'set' – Kasramvd

1

str.split() будет работать для большинства ваших дел, но потерпит неудачу, если вы вводите что-то вроде - 'hey! how are you?' или около того. Я думаю, вы должны использовать regex здесь. Пример -

import re 
if any(re.search(r'\b{}\b'.format(x),e) for x in af.x): 
    af.greeting() 

Пример/Demo -

>>> import re 
>>> e = 'hey! how are you?' 
>>> xx = ["hello", "hi", "hey"] 
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx): 
...  print('Hello to you too!') 
... 
Hello to you too! 
>>> e = 'shit' 
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx): 
...  print('Hello to you too!') 
... 
>>> 
>>> e = 'hi you' 
>>> if any(re.search(r'\b{}\b'.format(x),e) for x in xx): 
...  print('Hello to you too!') 
... 
Hello to you too! 
+0

Спасибо, я думаю, что попробую! –

+0

Моя неудачная неудача –