2017-08-11 74 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