首页 > 解决方案 > 带参数的函数。RecursionError:比较超过最大递归深度

问题描述

我正在使用函数和参数,甚至在内部调用函数时使用简单的代码我收到如下错误:第 7 行,如果 ask == 'yes': RecursionError: maximum recursion depth exceeded in comparison

如果我输入:是的答案,是的,它工作正常,但是当我输入:否并且函数在 else 语句下面被调用时,我得到错误:第 5 行,有问题 if ask == 'yes': RecursionError: maximum recursion depth exceeded相比下

我做错了什么?顺便说一句,我搜索了这个问题并没有解决问题 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。

标签: python-3.x

解决方案


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

推荐阅读