Python 3.1 快速導覽 - for 迴圈

Python 的 for 迴圈 (for loop) ,用於取得複合資料型態 (compound data type) 元素 (element) ,因此,具有重複結構的程式通常需要下列三項基本任務

1. 控制變數初始設定
2. 迴圈結束條件測試
3. 調整控制變數的值


for 迴圈只需要取得元素的控制變數 (variable) ,其餘條件 (condition) 測試與調整控制變數的部份,迴圈中會自動完成。


典型的 for 迴圈如下應用
a = "abcdefghijklmnopqrstuvwxyz"
i = 0

for x in a:
    print(x, end=" ")
    i += 1
    
    if i % 10 == 0:
        print()

print()

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


執行結果如下



此例印出 26 個英文小寫字母,資料儲存在第 1 行建立的變數 a 之中
a = "abcdefghijklmnopqrstuvwxyz"


第 2 行的變數 i ,用來計數,每印 10 個字母便印出新行符號,因此出值設為 0
i = 0


for 迴圈從第 4 行到第 9 行
for x in a:
    print(x, end=" ")
    i += 1
    
    if i % 10 == 0:
        print()


第 5 行的 print() 函數 (function) ,我們多增加一個預設的參數 (parameter) end ,這是指定印出 x 之後的結尾符號,如沒有指定,就會印出新行。


第 8 行的 if 陳述 (if statement) ,我們取 i 除以 10 的餘數是否等於 0 ,也就是說 i 從 0 一路遞增到 9 印出 10 個英文字母後,當 i 遞增到 10 或 10 的倍數,此時程式就會印出新行,因此一行會印 10 個英文字母。


迴圈 (loop) 也可以是巢狀的 (nested) ,所謂巢狀的迴圈是指迴圈中包含其他的迴圈,如下例程式印出九九乘法表,就是利用兩個 for 迴圈,一個 for 迴圈之中包含另一個 for 迴圈
for x in range(10):
    for y in range(10):
        print(x * y, end=" ")
    print()


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


執行結果如下



range() 為內建函數,會自動產生一個從 0 開始到參數減 1 的串列 (list) ,因此
for x in range(10):


就表示 x 會從 0 一路遞增到 10 - 1 ,也就是 9 。


若利用關鍵字 break 則可以挑出迴圈,而利用關鍵字 continue 則會跳過迴圈這一輪的執行。下例在印出九九乘法表的程式中加入了 breakcontinue 陳述
for x in range(10):
    if x == 0:
        continue
    elif x == 8:
        break

    for y in range(10):
        if y == 0:
            continue
        print(x * y, end=" ")
    print()


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


執行結果如下



由於 x 等於 0 與 y 等於 0 的時候都使用 continue 陳述,因此 0 列與 0 行不會被印出,此外, x 等於 8 時使用 break 陳述跳出迴圈,結束印出乘法表的迴圈。


中英文術語對照
for 迴圈for loop
複合資料型態compound data type
元素element
控制變數variable
條件condition
函數function
參數parameter
if 陳述if statement
迴圈loop
巢狀的nested
串列list






1 則留言:

Unknown 提到...

請問python的for loop 可以類似像java for (i=0;i<=11111;i*10+1){} 對迴圈變數做一些式子運算嗎 還是只能遞增or遞減