另一種迴圈的形式是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]
程式範例