Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 51

Chapter 4

迴圈

Python 程式設計初學指引 ( 第二版 )


本章重點
• 迴圈使用時機與類型。
• For 迴圈介紹。
• While 迴圈介紹。
• 巢狀迴圈介紹。
• 迴圈內執行流程控制。

© 滄海圖書 Ch04 迴圈 2
迴圈
• 讓程式在滿足特定條件的情況下連續執行一段程式碼多次,
此類的程式結構稱為迴圈 (Loop) 。
• 利用迴圈結構,不僅能簡化程式碼,還能大大降低程式碼
修改或維護的複雜度。
• Python 提供的兩種迴圈結構 — for…in 和 while 迴圈。

© 滄海圖書 Ch04 迴圈 3
for…in 迴圈基本運作
• for…in 迴圈的基本語法如下:

1. 後方所接的物件,包括字串 (String) 、串列 (List) 、元組 (Tuple)


等序列型別物件 (Sequence) ,以及字典 (Dict) 、集合 (Set) 等
可迭代型別物件 (Iterable) 。
2. 第一個元素 (Element) 開始,依序讀取至最後一個。只要能成
功讀取到元素,即將該元素內容寫入前方變數中,並執行迴圈
範圍內程式碼。

© 滄海圖書 Ch04 迴圈 4
圖 4-1 迴圈執行流程

© 滄海圖書 Ch04 迴圈 5
範例程式 4-3

© 滄海圖書 Ch04 迴圈 6
讀取序列型別物件中某區間元素
1. 進一步指定 for…in 迴圈僅讀取該物件某區間內的元素,
方式如: 序列型別物件 [( 起始序號 ):( 結束序號 )(: 梯
級 )] 。
2. 起始序號內定值為物件中第一個元素的位置 ( 亦即為
0) 。
3. 結束序號內定值為元素的數量。
4. 而梯級內定值為 1 。

© 滄海圖書 Ch04 迴圈 7
讀取序列型別物件中某區間元素
5. 起始序號、結束序號與梯級皆可省略,當所有參數皆被省
略時,迴圈會依序讀取物件中的所有元素。
6. Python 中序列型別物件中第一個元素的序號為 0 ,第二
個元素之序號為 1 ,依此類推。
7. Python 另定義序列最後一個元素序號為 -1 ,倒數第二個
元素序號為 -2 ,以此類推。

© 滄海圖書 Ch04 迴圈 8
範例程式 4-4

© 滄海圖書 Ch04 迴圈 9
使用 range() 函式控制迴圈執行次數
• range() 函式的主要功能在產生一個有規則的數字序列,例
如範例中的 range(5) 會產生 [0, 1, 2, 3, 4] 的序列。
• 函式的方式有以下三種:

© 滄海圖書 Ch04 迴圈 10
使用 range() 函式控制迴圈執行次數
1. range( 結束數字 )
第一種呼叫方式只需給一個參數「結束數字」,會產生從 0 開始
至 [ 結束數字 -1] 的序列。
2. range( 起始數字 , 結束數字 )
第二種呼叫方式需給「起始數字」與「結束數字」兩個參數, 會
產生從 [ 起始數字 ] 開始至 [ 結束數字 -1] 的序列
兩個參數也可以給予負值,例如 range(-3, -1) 會產生 [-3, -2] 的
序列。注意「起始數字」必須小於「結束數字」,否則會產生空
序列

© 滄海圖書 Ch04 迴圈 11
使用 range() 函式控制迴圈執行次數
3. range( 起始數字 , 結束數字 , 梯級 )
第三種呼叫需多給「梯級」參數內定值為 1 。
若希望產生由大到小的倒序時,必須將「梯級」參數設定為負值,
例如, range(5, 1, -2) 會產生 [5, 3] 的序列。

© 滄海圖書 Ch04 迴圈 12
範例程式 4-5

© 滄海圖書 Ch04 迴圈 13
範例程式 4-6

© 滄海圖書 Ch04 迴圈 14
範例程式 4-7

© 滄海圖書 Ch04 迴圈 15
範例程式 4-8

© 滄海圖書 Ch04 迴圈 16
while 迴圈基本運作
• while 迴圈的基本語法如下:

while 迴圈的執行次數是依據程式當下的執行結果是否滿足設定的
條件而定。
執行次數明確,通常會利用 for…in 迴圈,反之則利用 while 迴圈。
while 迴圈一定要放入可以讓條件運算式不成立的程式碼,否則將
造成無窮迴圈。

© 滄海圖書 Ch04 迴圈 17
圖 4-2 while 迴圈執行流程

© 滄海圖書 Ch04 迴圈 18
範例程式 4-9

© 滄海圖書 Ch04 迴圈 19
範例程式 4-10

© 滄海圖書 Ch04 迴圈 20
in 與 not in 運算式
• in 與 not in 運算式應用在 while 迴圈的條件運算中。比對
特定元素是否存在物件中。

© 滄海圖書 Ch04 迴圈 21
範例程式 4-11

© 滄海圖書 Ch04 迴圈 22
巢狀迴圈
• 迴圈結構中有另一個迴圈結構,通常先被執行到的迴圈稱
為外部迴圈,外部迴圈條件成立時所執行程式碼中的迴圈
稱為內部迴圈。
• 巢狀迴圈結構可以是 for…in 迴圈、 while 迴圈,或是兩者
的結合。

© 滄海圖書 Ch04 迴圈 23
巢狀迴圈
• 巢狀迴圈之內外層迴圈的互動關係類似時鐘的分針 ( 外部
迴圈 ) 與秒針 ( 內部迴圈 ) 。
• 當外部迴圈條件運算成立時,便會執行外部迴圈範圍內的
程式碼,包括內部迴圈;而內部迴圈會被執行至其條件運
算不成立為止,然後繼續執行其後續隸屬於外部迴圈的程
式碼,待完成後再回到外部迴圈條件運算式,判斷是否再
次執行外部迴圈範圍內的程式碼。

© 滄海圖書 Ch04 迴圈 24
© 滄海圖書 Ch04 迴圈 25
© 滄海圖書 Ch04 迴圈 26
範例程式 4-13

熟習語法的讀者,可試著將範例程式 4-13 簡化成以下的程式碼:


for Row in range(5): print("*"*20) if (Row%2) else print("="*20)

© 滄海圖書 Ch04 迴圈 27
迴圈內執行流程控制
• 「 break 」和「 continue 」指令,可用於控制迴圈內程式碼
的執行,因此通常會伴隨著條件運算式出現。
• break 指令主要是讓程式直接跳脫並結束 break 指令所在
之迴圈。
• continue 指令則是讓程式忽略執行 continue 指令所在之迴
圈的後續程式碼。

© 滄海圖書 Ch04 迴圈 28
break 指令
• break 指令可以讓程式立即結束執行迴圈結構,直接執行迴
圈後續的程式碼。
• 巢狀迴圈結構中,若 break 指令位於內部迴圈,程式會立
即結束執行內部迴圈,直接執行外部迴圈的後續程式碼,
• 若 break 指令位於外部迴圈, 程式會立即結束執行巢狀迴
圈內容,並跳至後續程式碼繼續執行。

© 滄海圖書 Ch04 迴圈 29
© 滄海圖書 Ch04 迴圈 30
範例程式 4-14

© 滄海圖書 Ch04 迴圈 31
範例程式 4-14

© 滄海圖書 Ch04 迴圈 32
範例程式 4-15

© 滄海圖書 Ch04 迴圈 33
範例程式 4-15

© 滄海圖書 Ch04 迴圈 34
範例程式 4-16

© 滄海圖書 Ch04 迴圈 35
範例程式 4-16

© 滄海圖書 Ch04 迴圈 36
範例程式 4-17

© 滄海圖書 Ch04 迴圈 37
範例程式 4-17

© 滄海圖書 Ch04 迴圈 38
continue 指令
• continue 指令讓程式忽略迴圈結構內的後續程式碼,並回
到迴圈結構的條件運算式,以判斷下一回合是否繼續執行
迴圈結構。

© 滄海圖書 Ch04 迴圈 39
© 滄海圖書 Ch04 迴圈 40
範例程式 4-18

© 滄海圖書 Ch04 迴圈 41
範例程式 4-18

© 滄海圖書 Ch04 迴圈 42
範例程式 4-19

© 滄海圖書 Ch04 迴圈 43
範例程式 4-19

© 滄海圖書 Ch04 迴圈 44
範例程式 4-20

© 滄海圖書 Ch04 迴圈 45
範例程式 4-20

© 滄海圖書 Ch04 迴圈 46
範例程式 4-21

© 滄海圖書 Ch04 迴圈 47
範例程式 4-21

© 滄海圖書 Ch04 迴圈 48
重點回顧
• 迴圈的主要功用在於讓程式可連續重複執行一段程式
碼, Python 提供。
• 「 for…in 」與「 while 」兩種迴圈結構。
• for…in 迴圈會依序 in 後方所接之序列型別物件或可迭代型
別物件中讀取元素,若成功讀取則執行迴圈範圍內程式碼,
直到物件中元素讀取結束。
• 使用 for…in 迴圈時,可利用 range() 函式產生連續數值序
列來控制迴圈的執行次數。

© 滄海圖書 Ch04 迴圈 49
重點回顧
• while 迴圈會反覆執行迴圈範圍內的程式碼,直到條件運算
式不成立時停止。因此使用 while 迴圈時,須記得於迴圈
範圍內加入可改變條件運算式狀態的程式碼,避免造成無
窮迴圈。
• 一般來說,若迴圈執行次數明確時會建議使用 for…in 迴圈,
反之則建議使用 while 迴圈。

© 滄海圖書 Ch04 迴圈 50
重點回顧
• 巢狀迴圈就是外部迴圈之中有內部迴圈。每次外部迴圈條
件成立並執行範圍內程式碼時,內部迴圈都會被完整執行,
待內部迴圈執行結束後, 再回到外部迴圈的條件運算式,
判斷是否執行下一回合的外部迴圈。
• break 指令與 continue 指令主要功能在於控制迴圈進行流
程。 break 指令會立即結束迴圈,讓程式接續執行迴圈後
的程式碼; continue 指令則是忽略迴圈中的後續程式碼,
讓程式回到該迴圈的條件運算式,判斷是否執行下一回合。

© 滄海圖書 Ch04 迴圈 51

You might also like