2014-02-20 153 views
1

我有一些关于另一个for循环for-else循环的问题。所以这里有一个例子:ForElse循环在另一个For循环

primelist = [] 
for p in range (2, x+1): 
    print 'in first for' 
    raw_input() 
    for i in range(2, p): 
     print 'in second for' 
     if p%i == 0: 
      print 'in if' 
      raw_input() 
      break 
    else: 
     print 'in else' 
     raw_input() 
     primelist = primelist + [p] 
return primelist 

正如你看到的,这是确定的素数,并将它们存储到一个列表,使他们可以在以后检索。所以我的问题是第一个循环。当我运行程序时,它会像这样进入:第一个FOR循环,ELSE,第一个FOR循环,第二个FOR循环等等。为什么第一次跳到ELSE? 另外,如果我问的第1000号我得到:7919与

for i in range(2, p) 

和7907与

for i in range(2, p/2). 

这是为什么? 希望你能帮我解决这个问题,但请不要给其他方法来实现Prime数字算法!

+0

正如您所写,此代码有语法错误。您是否想要将'else'语句(及其子语)缩进为与'if'语句内联? – Hooked

+2

@Hooked您可以在Python中使用'else' a'for'。如果循环终止而没有“中断”,则输入条件。 –

+0

@SilasRay哇,我没有意识到这一点。我的错误BlackTM。我会将我的评论留给其他人学习。 – Hooked

回答

1

Python's range不包含结尾值。

range[start, end) 

所以,在第一次迭代中,p值将是2和range(2, 2)是一个空列表。这就是为什么else部分被输入。

print range(2, 2) # [] 
+0

我明白了。谢谢! – BlackTM