2017-08-11 78 views
0

我写了一个函数来告诉某个数字是否是一个完美数字:如果它的所有因子的总和等于它自己,那么数字就是一个完美数字。无限循环调试

功能是这样:

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 

我希望它根据输入返回boolean值。 然后我想用一个for循环找出所有完美的数字与我上面的函数,但似乎有一个无限循环。我错在哪里?

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

print([x for x in a]) 
+4

温度从不是1. –

回答

1

你的函数进入时,一个素数是通过一个无限循环。这是因为你的while循环的条件取决于temp在每次迭代中被修改,但如果n是黄金这永远不会发生。之所以是在这一行:

if temp % i == 0: 

n是黄金在你的if语句块中的代码将被传递了完全,包括抽调temp变量的行。

+0

2不是唯一的。任何素数输入永远不会有'临时'达到1. – user2357112

+0

你是对的,我编辑了我的答案。 – MatTheWhale