上一篇介紹了 Python 中的
條件判斷,方法是透過了自動程式條件式判斷,以不同劇本的方式來執行動作。然而實際情況下,我們還常會遇到一種問題,就是必須重複執行某些相同的步驟,
而迴圈(loop)的設計就是為了解決此「重複執行」的一種控制結構,讓我們可以在條件符合的情況下利用迴圈執行資料的輸入、處理與輸出。
單層for-loop
第一類介紹的是單層for-loop,通常應用於我們有預想重複幾次,來限制迴圈總數,最普遍的方式就是搭配range()函數。
range(start, stop[, step]) start:計數從start開始。默認是從0開始,例如:range(5)就等於range(0, 5)
stop:計數到stop結束,但不包括stop,例如:range(0,5)就是[0, 1, 2, 3, 4],但沒有包括5
step:步長,默認為1
第一種示範:
for i in range(5):
print(i)
打印結果為:
0
1
2
3
4
第二種示範:
for i in range(10, 20):
print(i)
打印結果為:
10
11
12
13
14
15
16
17
18
19
第三種示範:
for i in range(100, 90, -1):
print(i)
打印結果為:
100
99
98
97
96
95
94
93
92
91
另外,for迴圈還可以使用字串「string」上:
for word in "Hello! World!":
print(word)
此方式就是將這個字串「string」當作一個list,打印結果就為此string字元數的拆解:
H
e
l
l
o
!
W
o
r
l
d
!
再來我們嘗試個複雜點的範例,假如我們要計算1~10的數字加總,該怎麼做呢?
sum = 0
for i in range(1,11):
sum += i
print(f"1~10:{sum}")
打印結果就為:
1~10:55
稍微改裝一下,不要侷限只能加總1~10,假如我想1加到100,或是1加到50,有沒有更靈活的方式呢?
n = int(input("請輸入1~值:"))
sum = 0
for i in range(1,n+1):
sum += i
print(f"1~{n}:{sum}")
輸入n=50,得出的打印結果為:
1~50:1275
巢狀for-loop
「巢狀for-loop」的特點就是在主要迴圈中又包覆著其他的迴圈。當內層迴圈將我們定義的重複次數完成後,才會跳回到外層迴圈執行動作。
「九九乘法表」由於具備了九列九行的計算資料,所以就為一個使用兩層巢狀迴圈結構的極佳範例。
for i in range(1,10):
for j in range(1,10):
print(f"{i}{j}={i*j}",end="\t") #換行
print()
執行的打印結果為:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
while-loop
另一種就是迴圈結構就式「while-loop」,for-loop的處理問題主要是放在解決「已知的重複迴圈數」,而while-loop則適用解決「無法預知的重複迴圈數」。
while-loop在執行內部敘述動作前,需事先檢查條件判斷式,如果判斷值為真(True),就重複迴圈loop,只有當達到指定的特殊狀況時(False),才結束跳出迴圈。
舉個工作儲蓄的小例子,假設我們定義的儲蓄目標為10萬元,而每個月扣掉支出後能存下來的金額,並無法預先知道,所以只要累積加總達到10萬元時,停止結束執行動作,此時while-loop就相當適合解決此類的問題。
total = 0
n = 0
while total < 100000:
n += 1
temp = int(input(f"請輸入第{n}月儲存的金額:"))
total += temp
print(f"已經存了{n}個月,存款共為{total}")
所以我們假設前四次的儲存金額各為5萬元、3萬元、1萬元、3萬元,此時判斷式total 100000為False,跳出迴圈並執行打印的結果:
已經存了4個月,存款共為120000
最後,我們還可以加上break指令,並搭配先前所學過的if換另一個敘述來做呈現:
break:中斷迴圈的執行並跳脫迴圈結構,繼續執行迴圈外的敘述。
#使用break,跳出迴圈
total = 0
n = 0
while True:
n += 1
temp = int(input(f"請輸入第{n}月儲存的金額:"))
total += temp
if total >= 100000:
break
print(f"已經存了{n}個月,存款共為{total}")
以上,就為程式語言中使用相當頻繁的迴圈控制(loop),其它更進階的部份,下回再做分享囉,謝謝大家!💪