2022-11-28|閱讀時間 ‧ 約 6 分鐘

資料分析 | Python新手村03_迴圈

上一篇介紹了 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字元數的拆解:
 
!
再來我們嘗試個複雜點的範例,假如我們要計算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),其它更進階的部份,下回再做分享囉,謝謝大家!💪
分享至
成為作者繼續創作的動力吧!
在瞬息萬變的數位宇宙中,不堅持永遠的Yes或No,自許以流量成長的阿甘精神,碰撞激盪出各種有趣的科技行銷手法,涵蓋產品數據、社群互動、廣告技術、內容創造、會員經營...等面向,一點一滴的帶大家進入產品Martech的領域中。
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言