2021-12-17|閱讀時間 ‧ 約 7 分鐘

不間斷 Python 挑戰 Day 11 - while 迴圈

另一種迴圈的形式是while迴圈,和for迴圈常常可以達到相同的功能,差別在於for迴圈是在一定的範圍內迭代,例如從1到100,或是串列裡的每一個元素;而while迴圈是一個條件判斷的迴圈,當滿足這個條件就執行迴圈的內容,不滿足時就跳出迴圈。

while 迴圈

while迴圈的基本語法如下,只要滿足condition1條件,就重覆執行A區塊程式:
while condition1: Do A
while迴圈和for迴圈常常是可以互相改寫,並沒有一定的寫作準則,例如以下的例子,想要印出從0到9的整數,使用for迴圈和while迴圈都可以達到一樣的目的。
使用for迴圈:
# for loop for i in range(10): print(i, end=" ")
使用while迴圈:
# while loop i = 0 while i 10: print(i, end=" ") i += 1
執行結果:
0 1 2 3 4 5 6 7 8 9
但在一些情況下,例如需要迭代的次數未知,或是某些條件是透過與使用者的互動才會產生,那使用while迴圈會更適合一些。
以下範例展示,假設我們在銀行存入10000元,年利率為1%,至少需要經過多少年才能將本金翻倍,由於「多少年」是未知數,但我們知道條件是「本金翻倍」,因此這裡適合使用while迴圈:
principal = 10000 year = 0 interest_rate = 0.01 while principal 20000: principal = principal * (1 + interest_rate) year += 1 print(year)
執行結果顯示70年才能將本金翻倍。
70
另一個例子簡單展示一個和使用者互動的例子,當使用者輸入「q」時,跳出迴圈:
input_chr = "" while input_chr != "q": input_chr = input("輸入q結束:")
執行結果:
輸入q結束:a 輸入q結束:f 輸入q結束:e 輸入q結束:g 輸入q結束:q

巢狀while迴圈 (Nested while loop)

和for迴圈一樣,while迴圈也允許巢狀迴圈,其語法如下:
while condition1: while condition2: Do something
引用在進階for迴圈裡九九乘法表的例子,使用while迴圈我們也可以這樣寫:
i = j = 1 while i 10: while j 10: print("%d*%d=%-4d" % (i, j, i * j), end=" ") j += 1 i += 1 j = 1 print()

無窮迴圈

無窮迴圈指的就是永遠不會停止的迴圈。使用無窮迴圈通常有其目的,例如程式要隨時監控外界訊號的中斷或使用者的輸入,來決定要做出什麼樣的反應,如果不是,常常是程式寫錯了,設定了一個永遠不會被違背的條件,讓程式永遠停在迴圈內無法往下執行,寫作時必須特別注意。
最簡單的一個無窮迴圈可以這樣寫,但我這邊加上註解,因為一旦真的這樣寫,程式就永遠卡住,必須試試「ctrl + C」或是停止編譯器來終止程式運行。
# while True: # Do something

break指令

while迴圈和for迴圈一樣,也可搭配break指令來使用,其基本語法如下,表示在while迴圈內,當滿足了condition2的條件後,可以在執行完B區塊程式後直接跳出迴圈:
while condition1: Do A if condition2: Do B break Do C
以前面和使用者互動的例子來說,結合無窮迴圈與break指令,我們也可以這樣寫:
input_chr = "" while True: input_chr = input("輸入q結束:") if input_chr == "q": break

continue指令

while迴圈也可以搭配continue指令來使用,其基本語法如下,表示當滿足了condition2的條件之後,可以在執行完B區塊程式後直接進入下一個迴圈,而不執行C區塊程式:
while condition1: Do A if condition2: Do B continue Do C
基本for迴圈的continue指令段落,我們使用for迴圈和continue指令,來印出range()範圍內的奇數,同樣也可以用while迴圈來改寫:
i = 0 odd_list = [] while i 10: i += 1 if i % 2 == 0: continue odd_list.append(i) print(odd_list)
執行結果:
[1, 3, 5, 7, 9]

else指令

else指令是使while迴圈在條件不滿足後,執行另一個程式區塊,其基本語法如下,當condition1滿足時,執行A區塊程式,一旦condition1條件不滿足後,就執行B區塊程式,再結束while迴圈:
while condition1: Do A else: Do B
在上面continue指令的例子中,我們可以多加一個else指令,做為while迴圈結束時的提示訊息:
i = 0 odd_list = [] while i 10: i += 1 if i % 2 == 0: continue odd_list.append(i) else: print(f"End of counting odd number to {i-1}") print(odd_list)
執行結果:
End of counting odd numbers to 9 [1, 3, 5, 7, 9]

程式範例

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.