Learning Objectives
- 迴圈敘述 while 的用法:條件為 True 就重複執行
- 迴圈敘述 for 的用法:依序走訪序列(字串、串列、range)中的每個元素
- 用 range(start, stop, step) 產生整數序列
- break、continue 與迴圈的 else 區塊
為什麼需要迴圈
電腦最擅長的事就是重複。要印出 1 到 100,不需要寫 100 行 print(),
而是告訴電腦「這件事做 100 次」。Python 有兩種迴圈:
| 迴圈 | 什麼時候用 | 停止條件 |
|---|---|---|
while |
不知道要重複幾次,只知道「什麼條件下繼續」 | 條件變成 False |
for |
要把一串東西(字串、串列、range)逐一拿出來處理 |
東西拿完了 |
注意縮排:迴圈「要重複的程式」必須縮排在
while或for底下,縮排結束就是迴圈結束。
while 迴圈:計算階乘
按 ▶ 自動播放,或用「下一步」一步一步看。注意右邊的 n 和 r 每一圈怎麼變,以及 while n <= m 在哪一刻變成 False。下方可以改 input() 讀到的數字再跑一次。
for 迴圈:逐一走訪串列
for f in fruits 每一圈把串列裡的下一個元素「指派」給 f。看右邊 f 的值如何依序換成三個字串。
range():產生一串整數
for 最常搭配 range() 使用。range(start, stop, step) 產生從 start 開始、
每次加 step、不包含 stop 的整數:
>>> list(range(5)) # start 預設 0
[0, 1, 2, 3, 4]
>>> list(range(1, 5)) # step 預設 1
[1, 2, 3, 4]
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
for + range():1 加到 5
range(1, 6) 產生 1、2、3、4、5。數數看迴圈一共跑了幾圈。
巢狀迴圈:外層一步,內層一整圈
迴圈裡面還可以有迴圈。外層的 i 每換一個值,內層的 j 就要從 1 跑到 3。這是投影片九九乘法表的縮小版(3×3),下面的實作題再完成完整的 9×9。
break 與 continue
continue=跳過這一圈剩下的程式,直接進入下一圈;break=立刻離開整個迴圈。仔細看執行箭頭在 continue 與 break 之後跳到哪裡。
迴圈的 else
迴圈也可以接 else:當迴圈自然跑完(沒有被 break 中斷)時才執行。適合「找東西,找不到要另外處理」的情況。
想一想
下面的程式會印出什麼?
for i in range(1, 5):
print(i, end=" ")
下面的程式會印出什麼?
n = 0
while n < 10:
n += 3
print(n)
迴圈後面的 else 區塊什麼時候會執行?
追蹤 break 與 continue
下面的程式會印出什麼?
for i in range(6):
if i == 2:
continue
if i == 4:
break
print(i, end=" ")
巢狀迴圈 for i in range(3): 裡面再放 for j in range(4):,最內層的程式一共執行幾次?
實作:九九乘法表
用巢狀迴圈印出 9×9 乘法表:每一列是 i 乘上 1 到 9,數字之間用一個空白隔開,每一列結束換行。補完 TODO 那一行後按「執行並檢查」。
重點精華回顧
while 條件:先檢查條件再執行;條件一開始就不成立,迴圈一次都不會跑。記得在迴圈裡改變條件,否則會變成無窮迴圈。for 變數 in 序列:依序把序列的每個元素指派給變數,元素拿完就結束。range(start, stop, step):不包含stop;start預設 0、step預設 1;step可以是負數。- 巢狀迴圈:外層走一步,內層走完一整圈;總次數是兩層次數相乘。
continue跳到下一圈,break離開整個迴圈;迴圈的else只在沒有break時執行。