分配的变量得到 'UnboundLocalError'
assigned variable gets 'UnboundLocalError'
UnboundLocalError:赋值前引用了局部变量 'i'。
这是我从代码中得到的错误,但我的 'i' 仍在本地范围内。
函数 factor2(n) 本身起作用。但是当放入 for 循环时,它会抛出错误。我知道这背后有什么东西,但我想不通。
def tri_num(n):
return n * (n + 1) // 2
def factors2(n):
f_ = 1
for i in range(2, int(n ** .5) + 1):
count_ = 0
while n % i == 0:
count_ += 1
n /= i
if count_ != 0:
f_ *= count_ + 1
else:
if n > i:
f_ *= 2
return f_
import itertools
for n in itertools.count(1):
m = tri_num(n)
q= factors2(m)
if q > 500:
print(m,q)
break
*
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-52-07bebaa60ddd> in <module>()
2 for n in itertools.count(1):
3 m = tri_num(n)
----> 4 q= factors2(m)
5 if q > 500:
6 print(m,q)
<ipython-input-51-214ce9ab60ad> in factors2(n)
9 f_ *= count_ + 1
10 else:
---> 11 if n > i:
12 f_ *= 2
13 return f_
UnboundLocalError: local variable 'i' referenced before assignment
*
'else:' is part of the for loop, it should not throw an error
s = factors2(81)
print(s)
给我我的答案“5”,没有错误。
我的脚本应该可以运行并给我两个数字
UPDATE: Thank you, I figured out. It is a bug in my factors2(), it fail to function when n = 0, 1 and 2. it will be fixed
您正在遍历一个空范围,这意味着在您进入 for
循环的 else
子句之前从未分配给 i
。
例如,count
产生的第一个值是 1。然后是 tri_num(1) == 1
,因此 factors2
被调用为 n == 1
。这导致调用 range(2, int(1**.5)+1)
,这导致 range(2,2)
确实是空的。由于迭代器永远不会产生值,因此永远不会分配给 i
,并且输入 else
子句,您假设 i
does 有一个价值。 QED.
UnboundLocalError:赋值前引用了局部变量 'i'。 这是我从代码中得到的错误,但我的 'i' 仍在本地范围内。
函数 factor2(n) 本身起作用。但是当放入 for 循环时,它会抛出错误。我知道这背后有什么东西,但我想不通。
def tri_num(n):
return n * (n + 1) // 2
def factors2(n):
f_ = 1
for i in range(2, int(n ** .5) + 1):
count_ = 0
while n % i == 0:
count_ += 1
n /= i
if count_ != 0:
f_ *= count_ + 1
else:
if n > i:
f_ *= 2
return f_
import itertools
for n in itertools.count(1):
m = tri_num(n)
q= factors2(m)
if q > 500:
print(m,q)
break
*
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-52-07bebaa60ddd> in <module>()
2 for n in itertools.count(1):
3 m = tri_num(n)
----> 4 q= factors2(m)
5 if q > 500:
6 print(m,q)
<ipython-input-51-214ce9ab60ad> in factors2(n)
9 f_ *= count_ + 1
10 else:
---> 11 if n > i:
12 f_ *= 2
13 return f_
UnboundLocalError: local variable 'i' referenced before assignment
*
'else:' is part of the for loop, it should not throw an error
s = factors2(81)
print(s)
给我我的答案“5”,没有错误。
我的脚本应该可以运行并给我两个数字
UPDATE: Thank you, I figured out. It is a bug in my factors2(), it fail to function when n = 0, 1 and 2. it will be fixed
您正在遍历一个空范围,这意味着在您进入 for
循环的 else
子句之前从未分配给 i
。
例如,count
产生的第一个值是 1。然后是 tri_num(1) == 1
,因此 factors2
被调用为 n == 1
。这导致调用 range(2, int(1**.5)+1)
,这导致 range(2,2)
确实是空的。由于迭代器永远不会产生值,因此永远不会分配给 i
,并且输入 else
子句,您假设 i
does 有一个价值。 QED.