程式 (program) 中的迴圈 (loop) 就是在特定程式區塊 (block) 中,重複執行相同的工作
pass
for i in condition:
pass
Python 中有兩種迴圈,分別是 while 迴圈 (while loop) 與 for 迴圈 (for loop) 。我們先來看看 while 迴圈的寫法
i = 10 # 設定控制變數
while i > 0:
# 迴圈工作區
print(i)
i -= 1 # 調整控制變數值
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:while_demo.py
# 功能:示範 Python 中的迴圈
# 作者:張凱慶 */
這個迴圈所進行的工作很簡單,先在命令列上印出 10 ,然後一路遞減到 0 為止。迴圈有三個地方要注意
- 設定控制變數
- 條件
- 調整控制變數值
while 迴圈的控制變數 (control variable) 必須在 while 之前就先設定好,此例中將控制變數 i 設定為 10 。然後進入 while 的地方,條件 (condition) 就在 while 之後到冒號之前的地方,此例中為當控制變數 i 大於 0 時,迴圈便會重複執行。迴圈工作區,也就是 while 底下用縮排 (indentation) 的程式區塊,這裡,我們只有簡單的印出控制變數 i 的值,迴圈工作區的最後需要有調整控制變數值的地方。
來執行看看結果吧!執行結果如下
$ python while_demo.py |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
$ |
當我們明確知道重複次數的時候,我們得利用控制變數來記錄 while 迴圈所進行次數,這樣 while 迴圈才會有結束的一天,不然若是三個與控制變數相關的部份,漏了任一部份時,就有可能導致無窮迴圈 (infinite loop) 的發生,例如
i = 10 # 設定控制變數
while i > 0:
# 迴圈工作區
print(i)
# 沒有調整控制變數值
這樣一來,控制變數 i 永遠大於 0 ,所以迴圈會一直重複執行,此例中會不斷的在命令列印出 10 ,直到強制結束程式的執行為止。
也可用 break 跳出迴圈, continue 直接進行下一輪。
另外一個 for 迴圈用於取得具有多個元素 (element) 的物件 (object) ,例如內建函數 (function) range() 回傳一個依序的 range 物件
for i in range(10, 0, -1):
print(i)
for 與 in 連用, in 後面接多個元素的物件。這個 for 迴圈的功能與上面的 while 迴圈完全相同,寫成完整的範例程式,如下
print()
for i in range(10, 0, -1):
print(i)
print()
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for_demo.py
# 功能:示範 Python 中的迴圈
# 作者:張凱慶 */
此例的 range() 用了三個參數 (parameter) ,第一個參數為起始值,第二個參數為結束值,第三個參數為遞增值。執行結果如下
$ python |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
$ |
雖然 while 迴圈與 for 迴圈可以互相替代,但還是依特性去使用比較適合囉!
接下來我們繼續看到可以將程式模組化的重要的概念,也就是定義自己的函數。
中英文術語對照 | |
---|---|
區塊 | block |
條件 | condition |
控制變數 | control variable |
元素 | element |
for 迴圈 | for loop |
函數 | function |
縮排 | indentation |
無窮迴圈 | infinite loop |
迴圈 | loop |
物件 | object |
參數 | parameter |
程式 | program |
while 迴圈 | while loop |
重點整理 |
---|
1. 迴圈用於重複性質的工作, while 迴圈利用控制變數決定何時結束迴圈, for 迴圈則用於具有多個元素的複合資料型態。 |
2. 無窮迴圈是指沒有結束條件,一直執行的迴圈。 |
3. 利用 break 陳述可提前跳出迴圈。 |
4. 利用 continue 陳述可使迴圈直接進行下一輪。 |
問題與討論 |
---|
1. 很多情況都需要 while True 迴圈,這不是無窮迴圈嗎?那為什麼還要 while True 迴圈呢? |
2. while 迴圈與 for 迴圈要如何互相替代? |
3. 遞迴是一種演算法,遞迴跟迴圈有什麼不同呢? |
練習 |
---|
1. 寫一個程式 exercise0701.py ,利用迴圈計算 1 到 1000 的總和。 |
2. 承上題,另寫一個程式 exercise0702.py ,改成接受使用者輸入,計算 1 到使用者輸入整數的總和。 |
3. 迴圈中若有其他迴圈稱之為巢狀迴圈,利用巢狀迴圈及 '*' 寫一個程式 exercise0703.py,印出一個高 5 、底 5 的等腰直角三角形。 |
4. 承上題,另寫一個程式 exercise0704.py ,將三角形倒過來印。 |
5. 承上題,另寫一個程式 exercise0705.py ,改成接收使用者輸入邊長。 |
6. 寫一個程式 exercise0706.py ,利用巢狀迴圈印出九九乘法表。 |
7. 寫一個程式 exercise0707.py ,在 while True 迴圈中接受使用者的輸入,當使用者輸入 'e' 的時候利用 break 跳出迴圈。 |
8. 寫一個程式 exercise0708.py ,計算 10 的階層,也就是從正整數 1 乘以正整數 2 ,一路乘到正整數 10 。 |
9. 承上題,另寫一個程式 exercise0709.py ,改成接受使用者輸入,計算使用者輸入的階層數。 |
10. 費氏數列為 0 、 1 、 1 、 2 、 3 、 5 、 8 、 13 .... ,也就是後面的數字為前兩個數字的總和,寫一個程式 exercise0710.py ,計算出第 20 個數字。 |
11. 承上題,另寫一個程式 exercise0711.py ,改成接受使用者輸入,計算使用者輸入的第幾個費氏數。 |
相關教學影片
- Python 的簡單陳述 break ⇨ YouTube 頁面連結
- Python 的簡單陳述 continue ⇨ YouTube 頁面連結
- Python 的複合陳述 while ⇨ YouTube 頁面連結
- Python 的複合陳述 for in ⇨ YouTube 頁面連結