2013-01-24 86 views
2

我用Python寫了一個程序來生成素數 這裏是程序如果..其他的python

def genPrimes(n): 
    primes = [2] # primes generated so far 
    last = 3 # last number tried 
    while last <= n:   
     for p in primes: 
      if last % p == 0 and math.sqrt(p) <= last: 
       break 
     else: 
      primes.append(last) 
     last += 2 
    return primes 

http://codepad.org/d33tsQyT

這個程序產生正確的答案。如果你看到else的縮進:它被錯誤地放置。如果我嘗試在塊解釋器顯示內存錯誤時放置else語句。誰能說出爲什麼會發生這種情況。

在此先感謝 新婚夫婦

+0

該代碼顯然沒有正確縮進(閱讀:沒有縮進)。我試圖修復它,所以當您嘗試加載文件或粘貼文本時,它不再引發異常 - 但由於實際問題很可能與不正確的縮進相關,所以OP確實需要檢查我是否「我知道它是正確的。 – abarnert

回答

4

else實際上是附着在for循環,如果程序不中斷循環的執行。在你的情況下,如果沒有素數分成數字,它會執行,因此數字是素數,並被附加到列表中。

另請參閱the documentation

+0

再次感謝。我不知道,直到我可以使用其他for循環。 – Maries

2

它沒有被正確放置,python假設你正在使用for-else循環。

docs

當循環使用時,else子句有更多的共同點與try語句的 else子句比它說的if語句:一個 try語句的else子句當沒有發生異常時運行,並且在不發生中斷時運行循環的else子句。