Python 簡易手冊
單元 22 - while 陳述
關鍵字 (keyword) while 用來設計迴圈 (loop) ,所謂迴圈就是重複執行特定工作,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 設定控制變數 i = 0 # 印出小於 10 的整數 while i < 10: # 迴圈工作 print(i) # 調整控制變數 i += 1 # 檔名: while_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
典型的 while 迴圈分成以下四個部分
- 設定控制變數
- 測試迴圈結束條件
- 迴圈工作
- 調整控制變數
這個例子依註解 (comment) 分成這四個部分,首先在第 2 行設定控制變數 (control variable)
1 2 | # 設定控制變數 i = 0 |
接著在第 5 行,關鍵字 while 後面空一格,接上測試迴圈結束條件 (condition) ,此例是判斷控制變數 i 是否小於 10 ,最後要加上冒號
4 5 | # 印出小於 10 的整數 while i < 10: |
第 7 行為此迴圈進行的工作,只有印出控制變數 i
6 7 | # 迴圈工作 print(i) |
第 9 行,調整控制變數值
8 9 | # 調整控制變數 i += 1 |
此例如果沒有調整控制變數到滿足 while 迴圈的結束條件,那迴圈就永遠不會終止,此為永真迴圈 (infinite loop) 。永真迴圈為程式設計的一種技巧,一般來說,特殊結束條件的迴圈就會設計成永真迴圈,單元 25 - break 陳述會討論用關鍵字 break 結束永真迴圈的方式。
關鍵字 break 可以直接中斷迴圈,還有另一個關鍵字 continue 可以讓迴圈直接進行下一輪,單元 24 - continue 陳述會介紹如何使用 continue 。
這個程式就會先印出 0 ,然後 1 、 2 ⋯⋯ 到 9 為止,執行結果如下
> python while_demo.py |
0 1 2 3 4 5 6 7 8 9 |
> |
while 迴圈中可以有另一個迴圈,這叫做巢狀迴圈 (nested loop) ,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 設定控制變數 i, j = 0, 0 # 第一層迴圈 while i < 10: # 調整第一層迴圈的控制變數 i += 1 # 第二層迴圈 while j < 10: # 調整第二層迴圈的控制變數 j += 1 # 印出數字乘積 print(i*j, end=", ") # 印出斷行 print() # 重新設定第二層迴圈的控制變數 j = 0 # 檔名: while_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這個例子是印出九九乘法表,需要兩個控制變數,第一層迴圈為 i ,第二層則是 j ,由於控制變數的初值設定為 0 ,所以一進入迴圈就將控制變數遞增,注意第 17 行
16 17 | # 重新設定第二層迴圈的控制變數 j = 0 |
這是將第二層的控制變數 j 重新設定為 0 ,如果不這麼做,第二層迴圈就只會跑一次,此例執行結果如下
> python while_demo2.py |
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, |
> |
while 迴圈的最後可以加上 else ,這是迴圈結束條件為假時執行的部分,也可以看成是執行迴圈的預設選項,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 設定控制變數 i = 10 # 倒數計時 while i > 0: print(i) i -= 1 # 迴圈的預設選項 else: print("End") # 檔名: while_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
第 9 行就是 else 的部分
8 9 10 | # 迴圈的預設選項 else: print("End") |
此例是在迴圈結束後印出 "End" ,執行結果如下
> python while_demo3.py |
10 9 8 7 6 5 4 3 2 1 End |
> |
參考資料
- https://docs.python.org/3/reference/compound_stmts.html#the-while-statement
- https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming