Python 速查手冊

4.11 複合陳述 for in else

關鍵字 (keyword) forin 構成 for-in 迴圈 (loop) ,用來在複合資料型態中依序取得元素,基本使用是在 for 後面空一格,然後接取得元素的控制變數 (variable) ,接著空一格為 in ,再空一格接複合資料型態的物件 (object) ,最後加上冒號。 for-in 迴圈的底下未縮排的部分,最後可以接上 else ,處理迴圈條件為假的情況。

來看看實際的例子,這裡控制變數 i 依序取得 range(10) 產生的 09 的整數,然後利用變數 sum 進行加總,最後 sum 的結果是 45

sum = 0
for i in range(10):
    sum += 1

print(sum)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for01.py
# 功能:示範 for 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 for01.py
1
$
這裡 range() 完整的參數列為 start, stop, step ,三個參數都可用運算式代入,計算出常數值,然而這不代表可以動態調整 step 的值,像是第一次 step 設定為 1 ,第二次為 2 之類,因為 range() 會先計算回傳 range 物件,之後 for 便在這個最初設定好的 range 物件取得元素值。如果想要用 for 中遍尋自訂的數列,請用產生器設定該數列的產生模式,詳細請參考 3.10 yield 運算

接下來的例子把 for-in 用在字串 (string) 中,依序取得每一個長度為一的子字串,然後用 print() 函數印出子字串的內容

for i in "Hello":
    print(i)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for02.py
# 功能:示範 for 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 for02.py
H
e
l
l
o
$

for-in 迴圈裡頭也能有另一個 for-in 迴圈,迴圈中含有其他迴圈被稱為巢狀迴圈,這裡利用巢狀迴圈印出九九乘法表

for x in range(1, 10):
    for y in range(1, 10):
        print(x*y, end=" ")
    print()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for03.py
# 功能:示範 for 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 for03.py
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
$

for-in 迴圈中可以用關鍵字 continue 跳到下一輪,也就是複合資料型態物件的下一個元素,也可以用關鍵字 break 中斷迴圈進行

for x in range(1, 10):
    if x == 3:
        continue
    elif x == 8:
        break
    for y in range(1, 10):
        if y == 5:
            continue
        print(x*y, end=" ")
    print()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for04.py
# 功能:示範 for 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 for04.py
1 2 3 4 6 7 8 9
2 4 6 8 12 14 16 18
4 8 12 16 24 28 32 36
5 10 15 20 30 35 40 45
6 12 18 24 36 42 48 54
7 14 21 28 42 49 56 63
$

for-in 迴圈最後如果接上 else ,這在迴圈條件為假的時候執行,需要注意的是這有點像是迴圈結束後的預設執行項目,也就是說, for-in 迴圈的條件為假,表示 in 之後的複合資料型態物件中沒有元素,全部元素取出後也是沒有元素,因此 for-in 迴圈的 else 比較像是預設執行項目,而非純粹沒有元素的後續處理

sum = 0
for i in []:
    sum += i
else:
    if sum == 0:
        print("沒有資料")
    else:
        print("資料已存")

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:for05.py
# 功能:示範 for 陳述
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 for05.py
沒有資料
$

上一頁: 4.10 複合陳述 if elif else
Python 速查手冊 - 目錄
下一頁: 4.12 複合陳述 while else
回 Python 教材首頁