2015-09-02 6 views
-3

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

theanswer= raw_input("Are you ok with that grade?") 
while theanswer: 
    if theanswer == ("yes"): 
     print ("good!") 
     break 
    elif theanswer == ("no"): 
     print ("oh well") 
     break 
    else: 
     print "enter yes or no" 

что мне нужно сделать так, чтобы она работает, Ive много пытались

+0

Проверьте место, где вы изменяете 'theanswer' внутри цикла ... – molbdnilo

+0

им не редактировать его, я не знаю если бы я это сделал, мог бы рассказать мне? –

+1

Точно. Итак, какова ценность 'theanswer' на следующей итерации? – molbdnilo

ответ

7

Вам нужно иметь блокирующий вызов в своем заявлении else. В противном случае у вас будет бесконечный цикл, потому что theanswer всегда будет правдой. Как задаёте:

theanswer= raw_input("Are you ok with that grade?") 
while theanswer: 
    if theanswer == ("yes"): 
     print ("good!") 
     break 
    elif theanswer == ("no"): 
     print ("oh well") 
     break 
    else: 
     theanswer= raw_input("Please enter yes or no") 

Вот хороший resorce на Blocking vs Non-Blocking I/O. Это важно в любом приложении.

+0

@EvanWestphal, пожалуйста, попробуйте взять это как опыт обучения. Вот хороший ресурс по [Блокировка против неблокирующего ввода-вывода] (http://stackoverflow.com/questions/1241429/blocking-io-vs-non-blocking-io-looking-for-good-articles). Будет хорошо понимать разницу в будущей карьере кодирования :) – asdf

+0

@EvanWestphal Кроме того, если это сработало для вас, выберите его в качестве принятого решения :) – asdf

1

В основном в вашем коде у вас есть цикл while, который будет только разорваться, если theanswer == yes или == no. Вы также не дадите возможность изменить значение theanswer в вашей петле поэтому => цикл бесконечности.

добавить это в ваш код:

else: 

     print "enter yes or no" 
     theanswer= raw_input("Are you ok with that grade?") 
+0

thank u so much !!! –

0

Это может быть достигнуто с помощью рекурсии

def get_user_input(text): 
    theanswer= raw_input(text) 
    if theanswer == 'yes': 
     print('good!') 
    elif theanswer == ("no"): 
     print('oh well') 
    else: 
     get_user_input('enter yes or no') 

get_user_input('Are you ok with that grade?') 
+0

Мне нравится рекурсивное решение, гораздо безопаснее, чем встроенный цикл while. – asdf

3

или это (это отделяет входную логику от того, что вы делаете с ответом):

theanswer = raw_input("Are you ok with that grade?") 
while theanswer not in ('yes', 'no'): 
    theanswer = raw_input('Please enter yes or no') 

if theanswer == "yes": 
    print("good!") 
elif theanswer == "no": 
    print("oh well") 
+0

Вам не хватает начального вопроса о '' Вы в порядке с вашей оценкой? '' – asdf

+0

ok, updated .... –

Смежные вопросы