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)