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