Python 入門指南 - 迴圈

程式 (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 底下用縮排的程式區塊,這裡,我們只有簡單的印出控制變數 i 的值,迴圈工作區的最後需要有調整控制變數值的地方。


我們先寫成完整的範例,來執行看看結果吧!
print()
i = 10 # 設定控制變數
while i > 0:
    # 迴圈工作區
    print(i)
    i -= 1 # 調整控制變數值
print()

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:whiledemo.py
# 功能:示範 Python 程式
# 作者:張凱慶
# 時間:西元 2012 年 12 月 


執行結果如下



當我們明確知道重複次數的時候,我們得利用控制變數來記錄 while 迴圈所進行次數,這樣 while 迴圈才會有結束的一天,不然若是三個與控制變數相關的部份,漏了任一部份時,就有可能導致無窮迴圈 (infinite loop) 的發生,例如
i = 10 # 設定控制變數
while i > 0:
    # 迴圈工作區
    print(i)


這樣一來,控制變數 i 永遠大於 0 ,所以迴圈會一直重複執行,此例中會不斷的在命令列印出 10 ,直到強制結束程式的執行為止。


也可用 break 跳出迴圈, contiune 直接進行下一輪。


另外一個 for 迴圈用於取得具有多個元素的物件,例如內建函數 (function) range() 回傳一個依序的 range 物件
for i in range(10, 0, -1):
    print(i)


forin 連用, in 後面接多個元素的物件。這個 for 迴圈與上面的 while 迴圈功能完全相同,寫成完整的範例程式,如下
print()
for i in range(10, 0, -1):
    print(i)
print()

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:fordemo.py
# 功能:示範 Python 程式
# 作者:張凱慶
# 時間:西元 2012 年 12 月 


此例的 range() 用了三個參數,第一個參數為起始值,第二個參數為結束值,第三個參數為遞增值。執行結果如下



雖然 while 迴圈與 for 迴圈可以互相替代,但還是依特性去使用比較適合囉!


接下來我們繼續看到可以將程式模組化的重要的概念,也就是定義自己的函數


中英文術語對照
程式program
迴圈loop
程式區塊block
while 迴圈while loop
for 迴圈for loop
控制變數control variable
條件condition
無窮迴圈infinite loop
函數function


您可以繼續參考
基礎篇


相關目錄
回 Python 入門指南
回 Python 教材
回首頁


參考資料
http://docs.python.org/3.1/tutorial/controlflow.html
http://docs.python.org/3.1/reference/lexical_analysis.html
http://docs.python.org/3.1/reference/simple_stmts.html
http://docs.python.org/3.1/reference/compound_stmts.html

3 則留言:

jickey 提到...

不好意思大大,關於迴圈的第一個範例,後面的解釋因該是相反了,感謝您的文章讓我學到很多,打擾了!

Unknown 提到...

這個迴圈所進行的工作很簡單,先在命令列上印出 1 ,然後一路遞增到 10 為止


不過看範例應該是印出10,然後一路遞減到1耶

Kaiching Chang 提到...

這邊打錯字了,已修改,感謝指正 :)