2015-10-14 108 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

相关问题