python中的快乐数问题。如何避免无限循环?

python中的快乐数问题。如何避免无限循环?,python,Python,此代码仅适用于快乐数字。当输入一个sad数字时,我得到一个递归错误,因为函数将无限循环,因为基本条件永远不会满足。(程序应返回1表示高兴的数字,返回0表示悲伤的数字)。我在处理如何将返回的0合并为悲伤的数字时遇到困难 快乐数字是一种数字,如果每个数字都是平方的,加在一起,在某一点上,它会给你1。例:7->49->97->130->10->1。 悲伤的数字都是不快乐的数字——2,3,4 def main(): usernum= input("enter a number: ") h

此代码仅适用于快乐数字。当输入一个sad数字时,我得到一个递归错误,因为函数将无限循环,因为基本条件永远不会满足。(程序应返回1表示高兴的数字,返回0表示悲伤的数字)。我在处理如何将返回的0合并为悲伤的数字时遇到困难

快乐数字是一种数字,如果每个数字都是平方的,加在一起,在某一点上,它会给你1。例:7->49->97->130->10->1。 悲伤的数字都是不快乐的数字——2,3,4

def main():
    usernum= input("enter a number: ")
    happynum(usernum)

def happynum(num):
    result=0
    if num == '1':
        return 1
    else:
        for dig in num:
            result += int(dig) * int(dig)
        happynum(str(result))

快乐的数字最终会收敛到1,你的基本情况会抓住它。但不快乐的数字会进入一个没有结束的周期序列。因此,您的递归将永远不会结束。一个解决办法是保留一个你迄今为止看到的数字列表。如果你看到一个重复,你就知道你处于一个循环中,因此开始时是一个不愉快的数字

def happynum(num, seen=None):
    if seen is None:
        seen = set()
    result=0
    if num == '1':
        print("happy")
        return 1
    else:
        for dig in num:
            result += int(dig) * int(dig)
        if(result in seen): # been here before
            print("sad")
            return
        seen.add(result)
        return happynum(str(result), seen)

happynum('97') #prints happy
happynum('98') # prints sad

你说的“我不能让它工作”到底是什么意思?它以什么方式失效?大家好,欢迎来到stack overflow。有关如何编写高质量问题的信息,请参阅。我看不到您在任何地方调用
main()
。您的
happynum
函数实际上只返回输入
'1'
之外的任何内容。您可能希望
在最后一行返回happynum(str(result))
,并确定导致
0
的递归基本情况,然后返回该结果。(我还没有研究过这个问题,所以我不知道如何处理。)你需要完全定义你的目标问题,然后给我们正确的错误文档。适用于这里。我们需要知道什么是“快乐数字”,以及您的代码如何在特定输入上失败。