Python 为什么这个for循环给我的输出不正确?

Python 为什么这个for循环给我的输出不正确?,python,python-3.x,if-statement,for-loop,Python,Python 3.x,If Statement,For Loop,我有一个函数,告诉我一个数字的因子,然后应该打印出它有多少 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

我有一个函数,告诉我一个数字的因子,然后应该打印出它有多少

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.
>>> 

我做错了什么?

在您第一次调用
getFactors(16)
时,您将正确地得到
4
。问题可能是您多次调用该函数,并且由于您使用了
全局因子
,因此每次调用该函数时,
因子
的值不会重置为
0
。每次调用函数时,全局变量都会不断变化

如果删除
global
变量并使其函数为local,它将正常工作

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.

明亮的谢谢,我完全忘了它需要重置。@Eddie如果不打印要返回它们的因子,您可以将函数转换为一行作为
return[I for I in range(1,n),如果n%I==0]
(或者使用yield,当然)您不需要完全转到
n
。显然,系数不能大于
n/2
。因此,您可以使用
范围(1,n/2)