Python 的循環控制語句
在代碼中有的時候我們需要程序不斷地重復執行某一種操作,例如我們需要不停的判斷某一列表中存放的數據是否大于 0,這個時候就需要使用循環控制語句。
1. while 循環語句
1.1 功能與語法
程序的循環結構允許多次執行相同的代碼塊,如下圖所示:
在循環結構中,程序的執行流程為:
- 判斷循環條件
- 如果為真,則執行循環中的代碼塊;執行后跳轉到步驟 1,重復第 1 步和第 2 步.
- 如果為假,則循環結束
Python 提供了 while 語句用于循環控制,語法如下:
while 條件:
代碼塊
當循環條件為真時,程序會反復執行代碼塊,直至循環條件為假。
1.2 例子
編寫程序 while-loop.py,如下所示:
number = 1
while number <= 3:
print(number)
number = number + 1
print('END')
- 在第 1 行,設置變量 number 的初值為 1
- 在第 2 行,判斷變量 number 是否小于等于 3,執行 4 次條件判斷
- 第 1 次條件判斷時,number 等于 1,打印 1,將 number 遞增為 2
- 第 2 次條件判斷時,number 等于 2,打印 2,將 number 遞增為 3
- 第 3 次條件判斷時,number 等于 3,打印 3,將 number 遞增為 4
- 第 4 次條件判斷時,number 等于 4,循環結束,執行第 5 行,打印 END
程序輸出結果為:
1
2
3
END
2. for 循環語句
2.1 功能與語法
Python 提供了 for 語句用于遍歷序列中的元素,語法如下所示:
for 循環變量 in 序列:
代碼塊
假設序列中包含有 N 個元素:A1、A2、…、An,使用 for 語句遍歷該序列的過程如下:
- for 語句中的代碼塊會執行 N 次
- 第 1 次執行時,循環變量的值為 A1
- 第 2 次執行時,循環變量的值為 A2
- …
- 第 N 次執行時,循環變量的值為 An
for 語句用于遍歷序列中的元素,這里所講的序列是廣義的,可以是:
- 列表
- 元組
- 集合
- range 對象
2.2 遍歷列表
程序的輸出結果如下:
www
imooc
com
2.3 遍歷元組
程序的輸出結果如下:
www
imooc
com
2.4 遍歷集合
程序的輸出結果如下:
www
imooc
com
2.5 遍歷 range 對象
Python 中 range 對象表示一定范圍的整數序列,它有兩種形式:
- range (number) 表示區間 [0, number) 內的整數序列,該區間從 0 開始、到 number 結束,不包含 number。
- range (start, end) 表示區間 [start, end) 內的整數序列,該區間從 start 開始、到 end 結束,不包含 end。
- 例子:遍歷 range (3)
range (3) 表示 0、1、2 這三個整數構成的序列,程序的輸出結果如下:
0
1
2
- 例子:遍歷 range (1, 3)
range (1,3) 表示 1、2 這兩個整數構成的序列,程序的輸出結果如下:
1
2
3. break 語句
3.1 功能與語法
在通常的循環中,當條件為假時,循環才會終止,有些情況下,希望能夠提前從循環中退出。Python 提供了
break 語句用于從循環中退出,如下圖所示:
- 當條件為假時,循環結束,程序流程到達出口
- 當條件為真時,執行條件為真的分支中的代碼塊
- 如果代碼塊中包含有 break 語句
- break 語句會中斷當前的循環執行流程,直接跳轉到程序的出口
3.2 例子
編寫程序檢測 number 是否為素數,將檢測結果保存在變量 is_prime 中,如下所示:
number = 9
is_prime = True
factor = 2
while factor < number:
print(factor)
if number % factor == 0:
is_prime = False
break
factor = factor + 1
print(is_prime)
- 在第 1 行,設置 number 為 9,程序檢測 number 是否為素數
- 在第 2 行,設置檢測結果 is_prime 初值為 True
- 在第 3 行,設置循環變量 factor 為 2
- 在第 4 行,判斷循環變量 factor 是否小于 number
- 在第 9 行,循環變量 factor 自增 1
- 在第 6 行,判斷 factor 是否是 number 的因子
- 如果 factor 是 number 的因子,則 number 不是素數
- 在第 6 行,將結果記錄在變量 is_prime 中
- 在第 7 行,已經檢測到 number 不是素數,因此可以提前退出循環
運行程序,輸出結果如下:
2
3
False
4. continue 語句
4.1 功能與語法
在通常的循環中,循環塊中的語句是順序執行的,有些情況下,希望能夠跳過循環塊中的剩余語句。Python 提供了 continue 語句用于跳過循環塊中的剩余語句,如下圖所示:
- 當條件為假時,循環結束,程序流程到達出口
- 當條件為真時,執行條件為真的分支中的代碼塊
- 如果代碼塊中包含有 continue 語句
- break 語句會中斷當前的循環執行流程,直接跳轉到循環條件處
4.2 例子
編寫程序計算列表中正數的累加和,代碼如下:
list1 = [1,2,3,4,5,6]
list1_sum = 0
for i in list1:
if i % 2 != 0:
continue
list1_sum += i
print(list1_sum)
- 在第 1,2 行,設定一個含有六個元素的列表,并定義一個結果變量;
- 在第 3 行,使用 for 循環遍歷這個列表;
- 在第 4 行,判斷元素是否是偶數,不是偶數則使用 continue 關鍵字跳出本次循環
- 在第 6 行,能夠執行到這里說明元素是偶數,則追加到結果變量上。
程序運行的輸出結果如下:
12
5. else 語句
5.1 在 while 循環中使用 else 語句
while 語句中提供了 else 語句,語法如下:
while 條件:
代碼塊 1
else:
代碼塊 2
- 當循環條件為真時,執行代碼塊 1
- 當循環條件為假時,執行代碼塊 2
編寫程序 while-else.py,如下所示:
number = 1
while number <= 3:
print(number)
number = number + 1
else:
print('At the end:', number)
程序輸出結果為:
1
2
3
At the end: 4
5.2 在 for 循環中使用 else 語句
for 語句中提供了 else 語句,語法如下:
for 變量 in 序列:
代碼塊 1
else:
代碼塊 2
- 當循環條件為真時,執行代碼塊 1
- 當循環條件為假時,執行代碼塊 2
編寫程序 for-else.py,如下所示:
for number in range(1, 4):
print(number)
else:
print('At the end:', number)
程序輸出結果為:
1
2
3
At the end: 3
5.3 一個有意義的例子
else 語句通常用于當循環非正常退出的場景中,一個有意義的例子如下:
number = 9
factor = 2
while factor < number:
print(factor)
if number % factor == 0:
is_prime = False
break
factor = factor + 1
else:
is_prime = True
print(is_prime)
該程序檢測 number 是否為素數,將檢測結果保存在變量 is_prime 中
- 在第 1 行,設置 number 為 9,程序檢測 number 是否為素數
- 在第 2 行,設置循環變量 factor 為 2
- 在第 3 行,判斷循環變量 factor 是否小于 number
- 在第 8 行,循環變量 factor 自增 1
- 在第 5 行,判斷 factor 是否是 number 的因子
- 如果 factor 是 number 的因子,則 number 不是素數
- 在第 6 行,將結果記錄在變量 is_prime 中
- 在第 7 行,提前退出循環
- 在第 9 行,依次測試 2、3、4、5、6、7、8 是否為 number 的因子
- 如果都不是 number 的因子,則說明 number 是素數
- 在第 10 行,將結果記錄在變量 is_prime 中
運行程序,輸出結果如下:
2
3
False
上述的例子,使用 for 循環改寫,如下所示:
number = 9
for factor in range(2, number):
print(factor)
if number % factor == 0:
is_prime = False
break
else:
is_prime = True
print(is_prime)
運行程序,輸出相同的結果,如下所示:
2
3
False
6. 小結
Python 中的循環控制語句只有 for 和 While 兩種,不同于 C 或者 Java 等其他編程語言還有 do…while。循環控制語句和分級結構語句一樣在工作中經常會用到。大家多想想在編程中有什么地方是需要用到 循環控制語句的,想到之后不妨用代碼實現一下。