所以我正在研究一个找到数字因子的短程序。我有一个while循环和该循环中的if语句似乎没有执行。 这是代码:
while e < a:
print "loop"
print str(e) + "e"
print str(i) + "i"
print str(a) + "a"
if e * i == a:
print e * i
cFactors.append(e)
cFactors.append(i)
e += 1
i = e
else:
print "adding i, " + str(i)
i += 1
if i > a:
print "i > a"
i = e
e += 1
在此示例中,在循环e = 1
,i = 1
和a = 2
的开头。 if i > a:
未执行。我添加了调试语句,因此我可以找到问题,但i
显然超过a
。任何人都知道会发生什么?
编辑: 很多答案都说循环没有正确编程,因为它在到达if语句之前就会退出,因为e变得大于a。也许我说错了。当它应该只循环几次时,它是无限循环的。这是我运行调试语句时会发生的事情。
loop
1 = e
1 = i
2 = a
adding i, 1
loop
1 = e
2 = i
2 = a
adding i, 2
loop
1 = e
3 = i
2 = a
adding i, 3
loop
1 = e
4 = i
2 = a
adding i, 4
对于任何混淆感到抱歉,但并不是说循环在它到达语句之前就已经退出了。我忘记提到if e * i == a:之前没有正常运作。
答案 0 :(得分:2)
&#34;核心语言功能X无法正常工作&#34;
确实如此。如果是e == 1
,i == 1
和a == 2
,则在i += 1
语句之后i == 2
。现在,2 > 2
并非如此。
答案 1 :(得分:0)
while循环在i&gt;之前退出a,因为i = e。因此,if中的代码将不会被执行。
相反,请尝试以下方法:
def factors(n):
return set(reduce(list.__add__,
([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))
答案 2 :(得分:0)
你说:
i
显然超过a
是的,但在e
变得等于或大于a
之前。打破你的循环。
您的代码没有错误,您只是没有正确计划。
答案 3 :(得分:0)
我为什么要执行? 2不大于2.所以if语句失败。