2013-05-30 101 views
0

我是Python新手,最近才完成Java编程。我用Python写一个基本的程序打印出第1000个素数,而我没有得到它的工作,由于某种原因,它也打印出下一个7号,除非我用不必要的突破:在Python中打印错误?

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。

+0

减少,而条件你能尝试格式化这一点更漂亮?堆栈溢出将让您通过突出显示并按下Ctrl + K来格式化代码 –

+0

我已经尝试修复您的帖子,请确认其含义是否正确。 –

回答

1

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

2

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

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

如果你不想break将打印出来的循环和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 
+0

谢谢!这是有道理的,我没有想到这一点。 –