2014-02-20 149 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