開啟「互動式 Python 執行列
Python中的while迴圈
 課程目錄
 編輯章節
 EDU-MD
 Google 教室
 加至書籤

while 迴圈

在上一個章節中,我們學習了可以將列表一項一項跑過的 for 迴圈,但是在 Python 中,迴圈可不只 for 迴圈一種。回想一下 for 迴圈的語法,我們必須先有一個列表,像是:

names = ["Bob", "Amy", "Dan"]
for name in names:
    print(name)

或是我們要事先知道迴圈執行幾次,接著使用 range(),像是:

for i in range(0, 5):
    print(i)

然而,如果我們今天沒有一個確定的列表,也沒有一個確定的執行次數,那麼我們要怎麼進行迴圈呢?想像一下,假設你要設計一個網站,會不停跳出問題來,直到使用者回答問題為止。既然我們不知道使用者要在問題出現幾次之後才會回答問題,因此迴圈得要能夠一直執行,並且沒有次數限制。

這樣的迴圈,for 就比較不適合使用,因為我們沒有辦法在一開始就確定迴圈執行的總次數。在這種情況下,while 迴圈就派上用場了。

while 迴圈

還記得當初我們學習過的 if 判斷式 嗎?讓我們用簡單的例子來複習一下:

a = 3
if a > 2:
    print("a大於2")
else:
    print("a不大於2")

if 判斷式後的程式只有在條件為 True 時才會執行,像是在這個例子中,因為 a > 2 的條件為真,因此程式被執行了。while 迴圈與 if 判斷式也有相同的邏輯,讓我們來看看下面這個例子:

a = 5
while a > 0:
    print(a)
    a -= 2

這段程式的執行結果為:

5
3
1

為什麼呢?讓我們仔細地看看這段程式想要表達什麼吧!在第一行時,我們宣告了一個變數 a,並且將其值定義為 5。接著到了第二行,碰到了 while 迴圈了。回想一下剛剛說的,while 迴圈跟 if 判斷式一樣,只有在條件為 True 時才會執行。對於此時來說,我們的條件是 a > 0,而 a 等於 5,因此條件符合,程式執行。

進入迴圈後,電腦於螢幕上 print 出了變數 a,也就是 5。到了第四行,a 的值被減 2,因此現在 a 的值等於 3。此時,迴圈執行完了第一次,電腦會繼續嘗試執行第二次迴圈。因為這個迴圈的條件是 a > 0,而此時 a 等於 3,因此迴圈繼續執行。

電腦於螢幕上 print 出變數 a 後,將 a 的值再度減少 2。現在,a 等於 1。電腦繼續嘗試執行迴圈,發現 a 等於 1,因此 a > 0 的條件為 True,於是電腦印出變數 a,並且將 a 減 2 變成 -1。這圈迴圈執行完了,電腦繼續嘗試執行迴圈。

然而,現在 a 等於 -1,而我們的條件說只有在 a > 0 時才能繼續執行迴圈。因為條件並不符合,電腦便停止執行迴圈。讓我們用下面這張圖來總結一下剛剛的程式:

continue 和 break

for 迴圈 一樣的,while 迴圈中也可以使用 continuebreak 關鍵字。讓我們再來複習一下:continue 可以讓電腦跳過這次迴圈,直接執行下一次迴圈;break 則是可以使電腦直接結束迴圈。

既然在 for 迴圈時我們已經學習過了 continuebreak,在此我們就直接來看看範例程式吧!假設我們要寫一個程式,要求使用者輸入「a」這個字母,如果使用者輸入「a」以外的東西,就繼續提示使用者輸入「a」,直到使用者輸入「a」為止,那麼我們可以這樣做:

while True:
    val = input("請輸入字母 a :")
    if val == "a":
        break
print("你輸入了 a !")

試著執行一下程式,看看會發生什麼事情吧!第一行中的 while True: 確保了這個迴圈會一直無窮地循環下去,直到迴圈中有 break 關鍵字出現,迫使電腦結束迴圈為止。

接著我們來看看這個有關 continue 的例子,我們的目標是從 50 開始,以 7 作為遞減的公差,印出所有大於 0 而且不是 4 的倍數的數。我們可以使用 while 迴圈:

i = 50
while i > 0:
    if i % 4 == 0:
        continue
    print(i)

這樣一來,我們可以得到以下的結果:

50
43
29
22
15
1

while-else

for 迴圈 一樣,while 迴圈後也可以加上 else,形成一個 while-else 的結構。

else 中的程式會在 while 迴圈結束之後執行,但是只有在 while 是自然結束的情況下才執行;倘若 while 迴圈是因為 break 而結束,else 中的程式則不會執行。讓我們看看這兩個範例:


i = 5while i > 0:
    print(i)
    i -= 2
else:
    print("迴圈結束")

將會輸出:

5
3
1
迴圈結束

另一個範例:

i = 5
while i > 0:
    if i == 1:
        break
    print(i)
    i -= 2
else:
    print("迴圈結束")

將會輸出:

5  
3

看出差別了嗎?在第一個範例中,迴圈是自然地結束,因此 else 中的程式被執行了,螢幕上印出了「迴圈結束」的字樣。反觀第二個範例,迴圈因為 break 而被迫結束,因此 else 中的程式沒有執行。

 均一平台
 台達磨課師
 酷課雲
 可汗學院
無相關資源
 收起側邊目錄
 
前往目錄頁面