#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())