重複
一段程式跑很多次,而你只寫一次。 · ⏱ 約 25 分鐘
你會學到三件事
while 怎麼讓一段程式重複
- 一個迴圈一定要有的三樣東西
break 和 continue
開始之前
想印 1 到 5,用現在會的東西只能寫五行 print。
那印到 100 呢?印到使用者輸入的那個數呢?寫不出來。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、while
照著打上這一段,它會印出 1 到 5:
1n = 12while n <= 5:3 print(n)4 n = n + 1
讀法:「只要 n <= 5 還成立,就一直做縮排裡面的事」。
它和 if 長得幾乎一樣,只差一個字——而行為差很多:
|
條件成立時 |
做完之後 |
if |
做一次 |
往下走 |
while |
做一次 |
回去再問一次條件 |
二、三樣東西,缺一不可
回頭看剛才那一段,三樣東西都在裡面:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1n = 1 # ① 起點 ——從哪裡開始2while n <= 5: # ② 條件 ——什麼時候還要繼續3 print(n)4 n = n + 1 # ③ 前進 ——每一圈讓它靠近終點
漏掉的通常是第三樣。
🚫 這一段是反例——課文在說不要這樣寫,別照著拉。
1n = 12while n <= 5:3 print(n)4 # ← 忘了 n = n + 1
n 永遠是 1,條件永遠成立,於是它永遠不會停——無窮迴圈。
每次寫完一個 while,回頭看一眼:
那個條件裡的東西,有沒有在迴圈裡被改?
⚠️ 而「前進」不一定是加一——n = n * 2、讀下一筆輸入都算。
只要那件事會讓條件遲早不成立就行。
三、累加
把每一次的數字加起來,要另外開一個變數裝總和:
1n = 12total = 03while n <= 5:4 total = total + n5 n = n + 16print(total) # 15
⚠️ total 要宣告在迴圈外面。 放進去的話它每一圈都重新變成 0。
這個「在外面開一個變數、在裡面累加」的形狀,之後會一直出現。
四、break 和 continue
這兩個字讓你在迴圈中間離開或跳過一圈:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1while True:2 s = input()3 if s == "":4 break # 跳出整個迴圈5 if s == "skip":6 continue # 這一圈剩下的不做,回去再問一次條件7 print(s)
while True: 是「永遠成立」——它一定要搭配 break,
否則就是刻意寫的無窮迴圈。
⚠️ continue 要小心:如果「前進」那一行在 continue 後面,
跳過它就等於沒有前進 → 無窮迴圈。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1n = 12total = 03while n <= 5:4 total = total + n5 n = n + 16print(total)
把積木打散,自己排回去:排回去:把剛才那支程式的積木排好
換你了
一直讀數字,直到使用者輸入 0 為止,然後印出總和。
⚠️ 裁判餵的是 7、2、9,最後一個 0(那個 0 只是停止的訊號,不算進總和)。
提示:while True: + 讀一個 + if n == 0: break + 累加。
到編輯器做這一題:練習:讀到 0 為止,印出總和
做一個
規則兩條:偶數就整除 2,奇數就乘 3 加 1,做到變成 1 為止。
讀進一個數字,印出它走了幾步。⚠️ 裁判用的是 27。
🔴 「是不是每個數字最後都會到 1」至今沒有人證明出來。試幾個,看誰找到走最久的。
到編輯器做這一題:做一個:這個數字要走幾步才到 1
這一課你做了什麼
- 你用
while 讓一段程式重複跑
- 你認得出迴圈的三樣東西:起點、條件、前進
- 你用
break 跳出、用 continue 跳過一圈
如果卡住了
| 你看到 |
多半是因為 |
| 一直印同一個東西停不下來 |
少了「前進」那一行 |
| 一次都沒跑 |
條件一開始就不成立 |
| 總和每次都一樣 |
total 宣告在迴圈裡面了 |
用了 continue 之後卡住 |
「前進」那一行被跳過了 |
在編輯器打開這一課 →