代码无法处理大循环

时间:2017-09-20 00:12:12

标签: python-3.x

设置:从数字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()

问题:如何防止此错误? 请求:请尝试编辑我的代码,而不是创建自己的代码。它可以帮助我了解我做错了什么,并在将来修复它。

1 个答案:

答案 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)