2013-01-24 45 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子句。