0

我是 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。

4

2 回答 2

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
于 2013-05-30T21:19:25.213 回答
1

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

于 2013-05-30T21:19:11.837 回答