如果语句在while循环中行为不正确

时间:2014-03-05 13:23:25

标签: python

所以我正在研究一个找到数字因子的短程序。我有一个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 = 1i = 1a = 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:之前没有正常运作。

4 个答案:

答案 0 :(得分:2)

  

&#34;核心语言功能X无法正常工作&#34;

确实如此。如果是e == 1i == 1a == 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语句失败。