设置:从数字32开始,平方和为13 因为3x3 + 2x2 = 13. 13的平方和是10,因为1x1 + 3x3 = 10.平方和 因为10是1,所以32是一个快乐的数字。
示例输入
输入将是一个正整数。这里给出了几个例子。
32
4565
42
5555
示例输出
程序必须打印一个句子,表明输入的数字是满意还是不满意,然后退出。
32是一个快乐的数字
4565是一个不愉快的数字
42是一个不愉快的号码
5555是一个快乐的数字
实际问题:每当我输入5555这样的大数字时,我会收到如下错误:
File "C:/Users/username/Desktop/bob.py", line 43, in sos
sos()
File "C:/Users/username/Desktop/bob.py", line 26, in sos
for x in range(repeat):
RuntimeError: maximum recursion depth exceeded in comparison
**代码:**
ans = input()
y = 5000 #this is so that the data does not loop forever
repeat = len(ans)
def sos():
global y
global repeat1
global ans
for x in range(repeat):
List = list(str(ans))
repeat1 = len(List)
repeat2 = len(List)
ans1 = int(List[int(repeat2)-int(repeat1)]) * int(List[int(repeat2)-int(repeat1)])
#print("ans1", ans1)
ans2 = int(List[int(repeat2)-(int(repeat1)-1)]) *int(List[int(repeat2)-int(repeat1-1)])
#print("ans2", ans2)
ans = ans1 + ans2
y -= 1
if x == 1:
print(this, "is a happy number")
else:
if y <=0:
print(this, "is not a happy number")
else:
sos()
sos()
问题:如何防止此错误? 请求:请尝试编辑我的代码,而不是创建自己的代码。它可以帮助我了解我做错了什么,并在将来修复它。
答案 0 :(得分:0)
如果递归的平方和最终在1
中,则数字是一个快乐的数字,或者如果它无休止地递归则不是(参见)。实现此类行为的一种简单方法是跟踪您在路上计算的中间总和:
def is_happy(num):
return is_happy_recursive(num, [])
def is_happy_recursive(num, seq):
sum_squares = sum([int(d)**2 for d in str(num)])
if sum_squares == 1:
return True
elif sum_squares in seq:
return False
else:
seq.append(sum_squares)
return is_happy_recursive(sum_squares, seq)