2015-10-14 75 views
4

我有一個函數告訴我一個數字的因素,然後應該打印它有多少。這是爲什麼這個循環給我一個不正確的輸出?

factors = 0 

def getFactors(n): 
    global factors 
    for i in range(1,n): 
     if n%i==0: 
      print(i) 
      factors += 1 
    print(n, "has", factors, "factors.") 

但是,因素的數量似乎是錯誤的。顯然16有6個因素,即使它明確列出4.

>>> getFactors(16) 
1 
2 
4 
8 
16 has 6 factors. 
>>> 

我在這裏做了什麼錯?

+0

你並不需要全路去'N'。顯然,一個因素不能大於'n/2'。因此,你可以用'range(1,n/2)' – Psytho

回答

6

您第一次打電話getFactors(16)您將正確獲得4。問題很可能是您多次調用該函數,並且由於您使用了global factors,因此每次調用該函數時factors的值都不會重置爲0。每次調用函數時,全局變量都會不斷變化。

如果刪除global變量,並使其功能當地它將很好地工作

def getFactors(n): 
    factors = 0 
    for i in range(1,n): 
     if n%i==0: 
      print(i) 
      factors += 1 
    print(n, "has", factors, "factors.") 

>>> getFactors(16) 
1 
2 
4 
8 
16 has 4 factors. 
+0

Brilliant來重複一半的迭代。謝謝,我完全忘了它需要重置。 – Eddie

+0

@Eddie如果不是打印你想要返回它們的因素,你可以把函數轉換成一行,如'return'[i for i in range(1,n)if n%i == 0]'(或者使用yield , 當然) – Pynchia