#python-3.x #function
#python-3.x #функция
Вопрос:
У меня есть функция, задающая вопрос и сравнивающая его, если не соответствует «да», она вызывает себя, чтобы снова задать вопрос. Проблема в том, что когда функция вызывается во второй раз, она возвращает старое значение.
def question():
ask = input("Are you OK?:").lower()
if ask != 'yes':
question()
return ask
print (question())
#output:
Are you OK?:no
Are you OK?:no
Are you OK?:yes
no
Process finished with exit code 0
Я пробовал другой способ, добавив elif, затем он возвращал none, поэтому я пришел к другой идее с вложенной функцией и параметрами, которые также не дают ожидаемых результатов.
def question():
ask = input("Are you OK?:").lower()
def check_question(n):
if ask != 'yes':
question()
else:
return ask
m = check_question(ask)
print (m)
question()
#output:
Are you OK?:no
Are you OK?:yes
None
Process finished with exit code 0
Комментарии:
1. Вы не сохраняете то, что возвращает рекурсивный вызов. Все, что вы делаете при ответе «нет», это снова вызываете функцию и игнорируете результат. Таким образом, в конечном итоге он просто возвращает исходное (верхний уровень) содержимое ask .
Ответ №1:
Это не очень хороший кандидат для рекурсии, как я сказал в своем комментарии. Вам просто нужен простой цикл while:
ask='no'
while ask != 'yes':
ask = input("Are you OK? ").lower()
Комментарии:
1. Да, спасибо, что сделали свою работу. Легко, я удивлен, что не пришел к этому 🙂 Спасибо