Python 入門指南 V2.00 - 單元 7 - 迴圈




程式 (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 的值,迴圈工作區的最後需要有調整控制變數值的地方。


我們先寫成完整的範例,來執行看看結果吧!


001print()
002i = 10 # 設定控制變數
003while i > 0:
004   # 迴圈工作區
005   print(i)
006   i -= 1 # 調整控制變數值
007print()
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)

forin 連用, in 後面接多個元素的物件。這個 for 迴圈的功能與上面的 while 迴圈完全相同,寫成完整的範例程式,如下


001print()
002for i in range(10, 0, -1):
003   print(i)
004print()
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

重點整理


  1. 迴圈用於重複性質的工作, while 迴圈利用控制變數決定何時結束迴圈, for 迴圈則用於具有多個元素的複合資料型態。
  2. 無窮迴圈是指沒有結束條件,一直執行的迴圈。
  3. 利用 break 陳述可提前跳出迴圈。
  4. 利用 continue 陳述可使迴圈直接進行下一輪。


問題與討論


  1. 很多情況都需要 while True 迴圈,這不是無窮迴圈嗎?那為什麼還要 while True 迴圈呢?
  2. while 迴圈與 for 迴圈要如何互相替代?
  3. 遞迴是一種演算法,遞迴跟迴圈有什麼不同呢?

練習


  1. 寫一個程式 exercise0701.py ,利用迴圈計算 11000 的總和。
  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. 費氏數列為 011235813 .... ,也就是後面的數字為前兩個數字的總和,寫一個程式 exercise0710.py ,計算出第 20 個數字。
  11. 承上題,另寫一個程式 exercise0711.py ,改成接受使用者輸入,計算使用者輸入的第幾個費氏數。

the end

沒有留言: