Ввод и проверка значения true , функция возвращает старое значение

#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. Да, спасибо, что сделали свою работу. Легко, я удивлен, что не пришел к этому 🙂 Спасибо