2017-02-21 18 views
0

Так что я хотел сделать маленького бота, который мог бы провести небольшой разговор с пользователем. Единственная проблема заключается в том, что когда я набираю одно из слов в списке (здравствуйте или привет), я получаю приветственное сообщение пользователя, но если я нахожу что-то вроде привет-компьютер, он дает мне сообщение TESTPHRASE. Есть ли что-то, что я могу добавить, чтобы оно выглядело в предложении ввода пользователя и находит слово в используемом списке, чтобы он мог ответить на соответствующий ответ.Как использовать словарь для проверки на вход пользователя?

user_greetings = {"hello", "hi"} 
user_input = input("-") 
if user_input in user_greetings: 
    print("Welcome User") 
else: 
    print("TESTPHRASE") 
+1

попытаться .split вход и проверить первое слово? – Nullman

ответ

5

Когда вы применяете in к строке и словарю, он будет проверять, является ли строка целой ключом. Похоже, вы хотите проверить либо первое слово в предложении, либо любое слово в предложении, находящемся в словаре.

В любом случае, вы хотите разделить вход на пространствах:

words = input('-').split() 

Если вы хотите проверить, первое слово, проследовать почти как раньше:

if words[0] in user_greetings: 
    print("Welcome User") 
else: 
    print("TESTPHRASE") 

Если какой-либо из слова должны вызвать приветственное сообщение, используйте any и выражение генератора:

if any(x in user_greetings for x in words): 
    print("Welcome User") 
else: 
    print("TESTPHRASE") 
+0

Upvote для генератора. :) – ostergaard

+0

@ajostergaard. Рад, что вам понравилось :) –

+0

Большое вам спасибо, я хотел, чтобы он смог почувствовать слово в пользовательском вводе, а затем ответить с широким заявлением. Итак, теперь, если я нахожу что-то вроде привет компьютера или компьютера, он запускает текст ответа вместо TestPHRASE. – TechTorch

1

Я получаю синтаксическую ошибку для вашего кода. Попробуйте переместить else в свою собственную линию. В противном случае ваш код работает для меня.

EDIT:

Перечитайте вопрос. Ваш код проверяет, приветствует ли «привет компьютер», что есть {'hello', 'hi'}. «Привет компьютер» не приветствуется. Вы можете обратный поиск и сделать

for greeting in user_greetings: 
    if greeting in user_input: 
     # print greeting 

В противном случае, вам нужно добавить «привет компьютер» в список приветствий.

+0

Проблема не в том, что код работает, но возврат результата OP не ожидался. –

+0

Я перечитал вопрос, я неправильно понял. Отредактировано для ответа на вопрос – jarcobi889

+1

Это работает. Перевернул мой голос. –

0

Что-то вроде этого сделало бы это:

greetings = ['hello', 'hi'] 
input = 'hello computer'.split() 
if set(greetings).intersection(set(input)): 
    print('Welcome') 
0

@Mad Физик дает очень полный ответ для этого, и я поддержал его ответ.

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

user_greetings = {"hello", "hi"} 
user_input = input("-").split() 

# set process control. 
greeting = None 

for word in user_input: 
    if word.lower() in user_greetings: 
     print("Welcome User") 
    else: 
     greeting = True 

if greeting: 
    print("TESTPHRASE")