Python中的打印错误?

时间:2013-05-30 21:11:41

标签: python python-2.7

我是Python新手,我最近才用Java编程。我正在用Python编写一个基本程序来打印出第1000个素数,虽然我确实让它工作,但由于某种原因,除非我使用不必要的中断,否则它也会打印掉接下来的7个数字:

import math

n=2 
location =0

while location < 999 :      
   if location == 998 :
      print n
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

打印

7919
7920
7921
7922
7923
7924
7925
7926

while location < 999 :
   if location == 998 :
       print n
        break
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

打印

7919

谁能告诉我为什么会这样?此外,当我试图解决这个问题时,我发现shell只打印一次,如果我复制了代码,无论是否改变它,它都不会打印任何东西。每次我想改变代码时,我都需要重新启动shell。

2 个答案:

答案 0 :(得分:2)

在第一种情况下,您正在打印,直到找到下一个素数。它在while循环中继续。由于location == 998为真,因此会打印数字。然后当它发现下一个素数location < 999解析为false并且while循环完成时。

您需要break,以便在找到素数时代码离开while循环。

如果您不希望break将打印件移出循环并将while条件减少1。

while location < 998 :
    n=n+1
    srn = math.sqrt(n)
    srn = int(srn)
    while  srn > 1 :
        if  n % srn == 0 :
            break
        elif srn==2 and n%srn != 0 :
            location = location+1
        srn = srn-1

print n

答案 1 :(得分:1)

完全需要休息。您的代码在第一个示例中打印出第1000和第1001个素数之间的所有内容。打印不会退出,因此您告诉您的代码打印它所测试的每个数字,而位置是998,但它实际上不会停止运行,直到位置达到999.