2014-09-01 4 views
0

Я пытаюсь написать код для текстового чата-бота в качестве моего первого полномасштабного проекта, и у меня возникает странная проблема с циклами, которые я не могу понять. Мой первичный цикл зависит от ввода текста, что должно произойти, когда пользователь набирает «bye», программа заканчивается. Единственная проблема - когда я запускаю его, независимо от того, что я ему говорю, он просто печатает один и тот же ответ снова и снова, пока я не нажму cntrl + c или не закрою окно. Вот код: импорта DateTimePython 2.7 While Loop Issue

print("Hi I am ChatBot V 0.0.1. I am here to converse. ") 

user_name=raw_input("What is your name?") 

print("Hello " + user_name + "!") 

user_input=raw_input().lower().replace(" ","").replace("?","") 

is_user_finished=0 

while (is_user_finished == 0): 

if user_input == "hi" or "hello": 
    print("Hello. How are you?") 

elif user_input == "whatisyourname": 
    print("I do not have a name at the moment. What do you think I should be named?") 
    user_input=raw_input().lower().replace(" ","").replace("?","") 
    print("Good choice! I like that name!") 

elif "where" and "you" in user_input: 
    print("I was typed up by some kid in California") 



else: 
    print("I do not currently understand what you said. Sorry.") 

if user_input == "bye": 
    print("Good bye. It was nice talking to you!") 
    is_user_finished = 1 
+4

Пожалуйста, откорректируйте код правильно. Помните, что это очень важно в Python. – Christian

+1

Ваш код не имеет правильного отступа и не может работать как таковой. Пробел имеет важное значение в коде Python. Поэтому мы не можем проверить вашу ошибку из этого кода. –

+0

Как вы пишете это для обучения, лучше начать использовать Python3.x. Есть много изменений/улучшений, которые были сделаны, которые помогут вам в будущем развитии. –

ответ

3

Что происходит, что линия

if user_input == "hi" or "hello": 

не делать то, что вы думаете. Вместо этого вы должны сделать

if user_input == "hi" or user_input == "hello": 

или даже, в более компактном виде:

if user_input in ["hi","hello"]: 

Нечто подобное происходит и с линией

elif "where" and "you" in user_input: 

, который должен быть

elif "where" in user_input and "you" in user_input: 
0

синтаксис выпуск.

Правильная форма должна быть: если A == B или A == C, а не A == B или C, что неверно.

0

Вы должны изменить линию

if user_input == "hi" or "hello": в if user_input == "hi" or user_input == "hello":

и

"where" and "you" in user_input: к "where" in user_input and "you" in user_input:,
потому "hello" и "where" всегда True.

Кроме того, вы должны положить user_input=raw_input().lower().replace(" ","").replace("?","")в цикл while.

0

При условии, что у вас есть правильный отступ, который, если цикл продолжает работать, я предполагаю, что вы это делаете, проблема, помимо указаний выше, о правильном использовании составных операторов if, вам нужно добавить «перерыв» на « до свидания ".

if user_input == "bye": 
    print("Good bye. It was nice talking to you!") 
    is_user_finished = 1 
    break