python中的快乐数问题。如何避免无限循环?
此代码仅适用于快乐数字。当输入一个sad数字时,我得到一个递归错误,因为函数将无限循环,因为基本条件永远不会满足。(程序应返回1表示高兴的数字,返回0表示悲伤的数字)。我在处理如何将返回的0合并为悲伤的数字时遇到困难 快乐数字是一种数字,如果每个数字都是平方的,加在一起,在某一点上,它会给你1。例:7->49->97->130->10->1。 悲伤的数字都是不快乐的数字——2,3,4python中的快乐数问题。如何避免无限循环?,python,Python,此代码仅适用于快乐数字。当输入一个sad数字时,我得到一个递归错误,因为函数将无限循环,因为基本条件永远不会满足。(程序应返回1表示高兴的数字,返回0表示悲伤的数字)。我在处理如何将返回的0合并为悲伤的数字时遇到困难 快乐数字是一种数字,如果每个数字都是平方的,加在一起,在某一点上,它会给你1。例:7->49->97->130->10->1。 悲伤的数字都是不快乐的数字——2,3,4 def main(): usernum= input("enter a number: ") h
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
的递归基本情况,然后返回该结果。(我还没有研究过这个问题,所以我不知道如何处理。)你需要完全定义你的目标问题,然后给我们正确的错误文档。适用于这里。我们需要知道什么是“快乐数字”,以及您的代码如何在特定输入上失败。