2014-10-08 70 views
-2
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

我想知道用別人的差異在這兩個代碼兩個程序有什麼區別?

+1

請考慮縮進,這並不清楚你的意思。 – bereal 2014-10-08 06:39:01

+0

'break'語句實際上會跳出最小的'for'或'while'循環。 – 2014-10-08 06:41:31

+0

[爲什麼python在for和while循環之後使用'else'?](http://stackoverflow.com/questions/9979970/why-does-python-use-else-after-for-and-while-循環) – KillianDS 2014-10-08 06:43:37

回答

-1

這是一個黑客早期打破外環,目前還沒有一個語法錯誤。例如,

https://stackoverflow.com/a/654002/921082

但我不建議你做它,因爲它經常斷裂的理解。如果內循環停止,則可以始終使用True/False標誌停止外循環。

+0

這是......怪異的。我不知道。所以它只有在我們不休息的情況下才會進入其他方面。這實際上很酷;換句話說,您可以使用else代碼將清理子句編碼到循環中。 – 2014-10-08 06:45:13

+1

-1:1)它不是破解(它確實是一個標準的python特性,雖然很奇怪),2)break循環是break語句的作用,你根本不解釋'else'確實,這實際上是個問題。 – KillianDS 2014-10-08 06:47:50

+0

絕對不是黑客! – 2014-10-08 07:10:20

0

代碼示例1:只要我們確定n不能是質數,該代碼就會從循環中斷開。 else語句與「爲M」循環有關,並執行每當for循環正常退出(即是它到達範圍的結束不休息)

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

此使用的其他不一種黑客(正如其他地方所暗示的 - 黑客是不應該真正起作用的東西,但確實如此) - 它是語言中有意設計的部分,並且專門針對這些情況而設計。代碼示例2:當我們知道n不是質數時,代碼不會中斷,否則這裏與if相關聯,並在if語句的條件爲假時執行(即,當n%m! = 0)。這個版本是越野車,因爲你可能會被告知一個給定的數字既是素數也不是素數的倍數。

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

總結 - 代碼實施例1是正確的,在它正確3和9之間的每個數報告它是否是一個素數或沒有。嚴格地說,內環可以是:

for m in range(3, n/2): 

沒有功能損失。

0
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else: 
     print(n,"prime") 

輸出 -

(3, 'prime') 
(4, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(7, 'prime') 
(8, 'not prime') 
(9, 'not prime') 

這裏break打破內部的for循環和執行其他聲明。 而在第二

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

輸出中: -

(4, 'prime') 
(5, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(6, 'prime') 
(6, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(8, 'prime') 
(8, 'not prime') 
(8, 'prime') 
(8, 'prime') 
(8, 'prime') 
(9, 'not prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 

繼續在內部循環。 請查看for else條款。