2014-07-22 151 views
0

考慮下面的Python程序,Python中else語句內外while循環

#Version 1 
x = 15 
y = 8 
while x - y > 0: 
    x -= 2 
    y += 1 
    print x, y 
    if x % y == 0: break 
else: 
     print x, y 

輸出當屬:

13 9 
11 10 
9 11 
9 11 

前三行獲得印刷,而內循環和最後一行(9月11日)作爲else子句的一部分被重新打印。 現在,另一種變型:

#version 2 
x = 15 
y = 8 
while x - y > 0: 
    x -= 2 
    y += 1 
    print x, y 
    if x % y == 0: break 
    else: 
     print x, y 

而且,現在的輸出是:

13 9 
13 9 
11 10 
11 10 
9 11 
9 11 

看到的,每個x,y對被印刷兩次,一個由上述如果打印語句和一個因else子句。 這是否意味着第一個版本允許其他情況:在循環時去外面?這不奇怪嗎? 背後的原因是什麼?

+0

這個問題表明/問的其他人的區別:雖然與其他的:如果第 –

回答

2

while循環在Python中可以有else s。從while statements

while_stmt ::= "while" expression ":" suite 
       ["else" ":" suite] 

這[while語句]反覆測試的表達,並且如果它是真實的,則執行所述第一套件;如果表達式爲假(可能是第一次被測試),else子句的套件(如果存在)將被執行,並且循環終止。

+0

澄清@ arshajii的回答是:主要的區別是,在你的第一種情況下,else子句連接到while循環,而它在第二種情況下附加在if語句中。 – skrrgwasme

+0

但即使沒有「其他」,「它」的表現也是如此,對吧? –