Не могу вырваться из цикла там, где я хочу

#python

#python

Вопрос:

Я пытался запрограммировать чат-бота. По большей части все работает отлично, но если я хочу выйти из своего цикла со словом «пока», программа генерирует ответ из списка «случайных ответов». Что я могу сделать, чтобы в качестве выходных данных была только моя команда печати? Заранее спасибо!

Вот мой код:

 import random

print("Welcome to Chatbot! Have fun.")
print("")
randomanswer = ['Thats not good', 'me too', 'how about you?']
reactionanswer = {'hello': 'hello, whats up?',
                  'sad': 'speak to me',
                  'entertainment': 'how can i entertain you?'}
userinput = ''
while True:
    if userinput == 'bye':
        print("See you soon!")
        break
    else:
        userinput = input("Question/Answer: ")
        userinput = userinput.lower()
        usersplit = userinput.split()
    
        for i in usersplit:
            if i in reactionanswer:
                print(reactionanswer[i])
            else:
                print(random.choice(randomanswer))



  

Комментарии:

1.Переместить userinput = input("Question/Answer: ") в перед if userinput == 'bye':

2. Вы вызываете input только после проверки, пока

Ответ №1:

Это потому, что вы проверяете 'bye' после следующей итерации цикла, то есть после проверки его в списке reactionanswer , это выполняет это print(random.choice(randomanswer))

Попробуйте сделать

 import random

print("Welcome to Chatbot! Have fun.")
print("")
randomanswer = ['Thats not good', 'me too', 'how about you?']
reactionanswer = {'hello': 'hello, whats up?',
                  'sad': 'speak to me',
                  'entertainment': 'how can i entertain you?'}
userinput = ''
while True:
    userinput = input("Question/Answer: ")
    userinput = userinput.lower()

    if userinput == 'bye':
        print("See you soon!")
        break

    usersplit = userinput.split()

    for i in usersplit:
        if i in reactionanswer:
            print(reactionanswer[i])
        else:
            print(random.choice(randomanswer))
  

Комментарии:

1. Ты самый лучший! Спасибо.

Ответ №2:

если вы проследите за ходом цикла while, то увидите, что он переходит непосредственно в раздел ‘else:’. Лучше запрашивать ввод сразу после запуска цикла while!