【问题标题】:Function with parameter. RecursionError: maximum recursion depth exceeded in comparison带参数的函数。 RecursionError:比较超过最大递归深度
【发布时间】:2021-03-23 09:07:18
【问题描述】:

我正在使用函数和参数,甚至在内部调用函数时使用简单的代码,我收到如下错误:第 7 行,有问题 如果问=='是': RecursionError:比较中超出了最大递归深度

如果我输入:是的答案,是的,它工作正常,但是当我输入:否并且函数在 else 语句下面被调用时,我得到错误: 第 5 行,有问题 如果问=='是': RecursionError:比较中超出了最大递归深度

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

【问题讨论】:

  • 如果 ask != 'yes' 则该函数将无限期地调用自身(或直到超过最大递归深度)。
  • 我现在看到了 :-) 但是,当我将问题放入 def question() 并执行 print(question()) 时,奇怪的事情发生了,当我输入答案时它可以工作,但是当“否”它再次询问,当我回答“是”时返回 NONE。

标签: python-3.x


【解决方案1】:

question() 在每次通话中都会提出一个新问题。 print(question()) 只关注第一个问题的答案。当您为第一个问题键入No时,question() 被称为询问第二个问题,并将None返回到您的第一个题。之后的任何答案都只是提出新问题 if ask != yes 或将结果返回到该问题 if ask == yes 但不影响 first 问题中的 None 返回。

您可以使用 while 循环不断地询问同一问题的新答案,直到满足条件:

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

print(question())

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 2022-01-22
    • 2020-03-14
    • 1970-01-01
    • 2020-04-01
    • 2018-06-07
    • 2019-04-18
    • 2021-02-13
    • 2017-11-05
    相关资源
    最近更新 更多