Функция с параметром. Ошибка рекурсии: максимальная глубина рекурсии превышена при сравнении

#python-3.x

#python-3.x

Вопрос:

Я работаю с функциями и аргументами и даже с простым кодом, когда функция вызывается внутри, я получаю ошибку типа: строка 7, под вопросом, если спросить == ‘yes’: RecursionError: максимальная глубина рекурсии превышена при сравнении

Если я набираю: Yes в ответе, да, это работает нормально, но когда я набираю: no и функция вызывается ниже оператора else, я получаю ошибку: строка 5, вопрос, если спросить == ‘yes’: ошибка рекурсии: максимальная глубина рекурсии превышена при сравнении

Я делаю что-то не так? Кстати, я погуглил проблему и не решает проблему sys.setrecursionlimit(5000) и все еще получаю ошибку:

 ask = input("Are you OK?:").lower()
asked = ask
def question(n):

    if ask == 'yes':
        return n

    else:
        question(n)

print (question(asked))
 

Я попробовал другой способ:

 def question():
    ask = input("Are you OK?:").lower()
    if ask != 'yes':
        question()
    else:
        return ask


print(question())
 

Но в этом коде это работает, только если я сразу отвечаю «да», если я отвечаю в первый раз «нет», он снова спрашивает, как и ожидалось, и когда я отвечаю «да» во второй раз, он возвращает и выводит: NONE.

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

1. если ask != 'yes' тогда функция будет просто вызывать себя бесконечно (или до тех пор, пока не будет превышена максимальная глубина рекурсии).

2. Теперь я это вижу 🙂 Однако, когда я помещаю вопрос в def question() и выполняю print(question()), происходит что-то странное, когда я набираю в ответе «Да», это работает, но когда «Нет», он спрашивает снова, и когда я отвечаю «да», возвращает NONE.

Ответ №1:

question() задает новый вопрос при каждом звонке. print(question()) просто подумайте об ответе на первый вопрос. Когда вы вводите No свой первый вопрос, question() это называется задать второй вопрос и вернуться None к первому вопросу. Любые ответы после этого просто задают новый вопрос if ask != yes или возвращают результат на этот вопрос if ask == yes , но не влияют на None возврат в первом вопросе.

Вместо того, чтобы продолжать задавать новый вопрос, вы можете использовать цикл while, чтобы продолжать задавать новый ответ на тот же вопрос, пока не будет выполнено условие:

 def question():
    ask = input("Are you OK?:").lower()
    while ask != 'yes':
        ask = input("Are you OK?:").lower()
    return ask

print(question())