Semorphe

重複

一段程式跑很多次,而你只寫一次。 · ⏱ 約 25 分鐘

你會學到三件事

  1. while 怎麼讓一段程式重複
  2. 一個迴圈一定要有的三樣東西
  3. break 和 continue

開始之前

想印 1 到 5,用現在會的東西只能寫五行 print。

那印到 100 呢?印到使用者輸入的那個數呢?寫不出來。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、while

照著打上這一段,它會印出 1 到 5:

1n = 12while n <= 5:3    print(n)4    n = n + 1
1變數n5≤變數n變數n1+設定n為印出當成立時,重複設定n為1234

讀法:「只要 n <= 5 還成立,就一直做縮排裡面的事」。

它和 if 長得幾乎一樣,只差一個字——而行為差很多:

條件成立時 做完之後
if 做一次 往下走
while 做一次 回去再問一次條件

二、三樣東西,缺一不可

回頭看剛才那一段,三樣東西都在裡面:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1n = 1              # ① 起點  ——從哪裡開始2while n <= 5:      # ② 條件  ——什麼時候還要繼續3    print(n)4    n = n + 1      # ③ 前進  ——每一圈讓它靠近終點
1變數n5≤變數n變數n1+設定n為印出當成立時,重複設定n為1234

漏掉的通常是第三樣。

🚫 這一段是反例——課文在說不要這樣寫,別照著拉。

1n = 12while n <= 5:3    print(n)4    # ← 忘了 n = n + 1
1變數n5≤變數n註解← 忘了 n = n + 1印出當成立時,重複設定n為1234

n 永遠是 1,條件永遠成立,於是它永遠不會停——無窮迴圈。

每次寫完一個 while,回頭看一眼: 那個條件裡的東西,有沒有在迴圈裡被改?

⚠️ 而「前進」不一定是加一——n = n * 2、讀下一筆輸入都算。 只要那件事會讓條件遲早不成立就行。

三、累加

把每一次的數字加起來,要另外開一個變數裝總和:

1n = 12total = 03while n <= 5:4    total = total + n5    n = n + 16print(total)        # 15
10變數n5≤變數total變數n+變數n1+設定n為設定total為變數total印出當成立時,重複設定total為設定n為123465

⚠️ total 要宣告在迴圈外面。 放進去的話它每一圈都重新變成 0。

這個「在外面開一個變數、在裡面累加」的形狀,之後會一直出現。

四、break 和 continue

這兩個字讓你在迴圈中間離開或跳過一圈:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1while True:2    s = input()3    if s == "":4        break          # 跳出整個迴圈5    if s == "skip":6        continue       # 這一圈剩下的不做,回去再問一次條件7    print(s)
真讀一行輸入,提示變數s""=跳出迴圈變數s"skip"=跳過這一輪變數s印出如果則如果則設定s為當成立時,重複1234567

while True: 是「永遠成立」——它一定要搭配 break, 否則就是刻意寫的無窮迴圈。

⚠️ continue 要小心:如果「前進」那一行在 continue 後面, 跳過它就等於沒有前進 → 無窮迴圈。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1n = 12total = 03while n <= 5:4    total = total + n5    n = n + 16print(total)
10變數n5≤變數total變數n+變數n1+設定n為設定total為變數total印出當成立時,重複設定total為設定n為123465

把積木打散,自己排回去:排回去:把剛才那支程式的積木排好

換你了

一直讀數字,直到使用者輸入 0 為止,然後印出總和。

⚠️ 裁判餵的是 7、2、9,最後一個 0(那個 0 只是停止的訊號,不算進總和)。

提示:while True: + 讀一個 + if n == 0: break + 累加。

到編輯器做這一題:練習:讀到 0 為止,印出總和

做一個

規則兩條:偶數就整除 2,奇數就乘 3 加 1,做到變成 1 為止。 讀進一個數字,印出它走了幾步。⚠️ 裁判用的是 27。

🔴 「是不是每個數字最後都會到 1」至今沒有人證明出來。試幾個,看誰找到走最久的。

到編輯器做這一題:做一個:這個數字要走幾步才到 1

這一課你做了什麼

如果卡住了

你看到 多半是因為
一直印同一個東西停不下來 少了「前進」那一行
一次都沒跑 條件一開始就不成立
總和每次都一樣 total 宣告在迴圈裡面了
用了 continue 之後卡住 「前進」那一行被跳過了
在編輯器打開這一課 →