无限循环调试

Infinite loop debug

我写了一个函数来判断某个数字是否是一个完美的数字:如果一个数字是一个完美的数字,如果它的所有因素的总和等于它自己。

函数如下:

def is_perfect(n):
    l = [1]
    temp = n
    while temp != 1:
        for i in range(2,n):
            if temp % i ==0:
                l.append(i)
                temp = int(temp / i)
                break
    if sum(l)==n:
        return True
    else:
        return False

我要根据输入return布尔值。 然后我想用一个for循环来找出我上面的函数的所有完美数字,但似乎有一个无限循环。我哪里错了?

a=[]
for x in range(1,1001):
        if is_perfect(x):
            a.append(x)

print([x for x in a])

当传入质数时,您的函数进入无限循环。这是因为您的 while 循环条件取决于 temp 在每次迭代时被修改,但是如果 n 是质数永远不会发生。原因在这一行:

if temp % i == 0:

n 为质数时,您的 if 语句块中的代码将被完全忽略,包括重新分配 temp 变量的行。