2013-05-30 125 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

謝謝!這是有道理的,我沒有想到這一點。 –