2014-09-13 37 views
1
for n in range(2,10): 
    for x in range(2,n): 
     if n%x==0: 
      print(n, 'equals to', x, '*', n//x) 
      break 
     else: 
      print(n, 'is a prime number') 

下面是我收到的輸出。在Python中查找質數3.4.1

3 is a prime number 
4 equals to 2 * 2 
5 is a prime number 
5 is a prime number 
5 is a prime number 
6 equals to 2 * 3 
7 is a prime number 
7 is a prime number 
7 is a prime number 
7 is a prime number 
7 is a prime number 
8 equals to 2 * 4 
9 is a prime number 
9 equals to 3 * 3 

但是,它重複的值。另外9不是素數。 請幫我糾正語法。

下面的鏈接: https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

+0

還有像這樣的另一個問題,它可能會幫助你:http://stackoverflow.com/questions/18833759/python-prime-number-checker – Frumples 2014-09-13 06:10:11

回答

5

當你擁有了它,你的程序檢查n是一個因素整除。如果是,很好,你正確地打印它是合成的。如果不是,你馬上打印它是一個素數。問題是,除非你檢查了其他因素,否則你不知道。僅僅因爲9不能被2整除並不意味着它是主要的。你也必須檢查3。

這意味着改變你的邏輯了一下。在宣佈n爲首要之前,您需要檢查所有可能的因素。一種方法是使用額外的布爾變量。

for n in range(2,10): 
    is_prime = True 

    for x in range(2,n): 
     if n%x==0: 
      print(n, 'equals to', x, '*', n//x) 
      is_prime = False 
      break 

    if is_prime: 
     print(n, 'is a prime number') 

請注意,「是一個素數」打印輸出不在內部循環內,它不在它內部。

另一種方法是使用酷酷的竅門,並將else子句添加到內部循環中。 else子句僅在循環退出時纔會觸發break語句。

for n in range(2,10): 
    for x in range(2,n): 
     if n%x==0: 
      print(n, 'equals to', x, '*', n//x) 
      break 
    else: 
     print(n, 'is a prime number') 

注意到這一想法黏合的else條款到循環是一個Python主義。它不存在於C或Java等其他語言中。因此,儘管整潔,但也很好理解基於布爾變量的解決方案。該技術將以任何語言運作。

+0

它的縮進問題......感謝分揀出來。 – Mohan 2014-09-13 06:43:14

0

根據您所提供的鏈接,它只有在這說

是的,這是正確的代碼示例代碼的聲明。仔細觀察:else子句屬於for循環,而不是if語句。

所以你應該意圖else條款針對內forif

+0

感謝您的幫助。 – Mohan 2014-09-13 06:42:04