Semorphe

重複

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

你會學到三件事

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

開始之前

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

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

一、while

n = 1
while n <= 5:
    print(n)
    n = n + 1

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

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

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

二、三樣東西,缺一不可

n = 1              # ① 起點  ——從哪裡開始
while n <= 5:      # ② 條件  ——什麼時候還要繼續
    print(n)
    n = n + 1      # ③ 前進  ——每一圈讓它靠近終點

漏掉的通常是第三樣。

n = 1
while n <= 5:
    print(n)
    # ← 忘了 n = n + 1

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

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

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

三、累加

n = 1
total = 0
while n <= 5:
    total = total + n
    n = n + 1
print(total)        # 15

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

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

四、breakcontinue

while True:
    s = input()
    if s == "":
        break          # 跳出整個迴圈
    if s == "skip":
        continue       # 這一圈剩下的不做,回去再問一次條件
    print(s)
做什麼
break 整個迴圈結束
continue 這一圈剩下的不做,繼續下一圈

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

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

完成的樣子

n = 1
total = 0
while n <= 5:
    total = total + n
    n = n + 1
print(total)

換你了

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

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

這一課你做了什麼

如果卡住了

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