2014-03-05 60 views
0

所以我正在研究一个能够找出数字因子的短程序。我有一个while循环和一个if语句,在那个循环中似乎没有执行。 下面的代码:如果语句在while循环中行为不正确

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:在早期不能正常运行。

+0

e = 1,i = 1,e * i = 1 a = 2,否则设置i = 2 a = 2所以我不是> – sabbahillel

+0

这似乎是我犯了一个愚蠢的错误,从字符串到输入的整数。 – SamH

回答

2

“核心语言特性X工作不正常”

它。如果e == 1,i == 1a == 2,那么在i += 1声明后,i == 2。现在,2 > 2是不正确的。

0

while循环在i> 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))) 
+0

对不起,我的意思是说,如果e * i == a:也不工作 – SamH

0

你说:

i显然变得超过a

是的,但在此之前e等于到o r大于a。打破你的循环。

没有什么是错误与您的代码,你只是没有正确计划。

0

我为什么要执行? 2不大于2.因此if语句失败。