與其背語法,不如做一個遊戲
學 while 迴圈跟 if 判斷式的時候,課本範例常常是「印出 1 到 100」這種看完就忘的東西。換個方式——我們用大概十行程式做一個猜數字遊戲,從最陽春的版本開始,一路加功能,寫到最後你會發現迴圈和判斷式已經自然刻進腦子裡了。
規則很簡單:電腦隨機想一個數字,你來猜,程式告訴你「太大」還是「太小」,直到猜中為止。
版本一:先做「判斷猜對沒」——if / elif / else
先不管重複猜,只做一次判斷。電腦用 random 隨機挑一個數字,我們猜一次,讓程式回報結果:
import random
answer = random.randint(1, 100) # 電腦隨機想一個 1~100 的整數(頭尾都包含)
guess = int(input("猜一個 1~100 的數字:"))
if guess == answer:
print("猜對了!")
elif guess < answer:
print("太小了")
else:
print("太大了")這裡的重點是判斷式:if 條件成立就做它底下那塊,不成立就往下看 elif(否則如果),全部都不成立才走 else(否則)。三選一,一次只會執行其中一塊。
問題也很明顯——只能猜一次,猜錯就結束了。
版本二:讓它可以一直猜——while 迴圈
要能重複猜,就把「輸入 + 判斷」這段用 while 包起來,猜中才跳出:
import random
answer = random.randint(1, 100)
count = 0
while True: # 一直重複,直到遇到 break
guess = int(input("猜一個 1~100 的數字:"))
count += 1 # 每猜一次,次數加一
if guess == answer:
print(f"猜對了!你總共猜了 {count} 次")
break # 跳出 while 迴圈,遊戲結束
elif guess < answer:
print("太小了")
else:
print("太大了")版本三:每次猜完縮小範圍提示
只講「太大/太小」還是有點難猜。我們用兩個變數 low、high 記住「答案目前確定落在哪個區間」,每猜一次就把區間縮小,讓玩家看得到範圍越縮越小:
import random
answer = random.randint(1, 100)
low, high = 1, 100 # 答案目前確定在這個區間內
count = 0
while True:
guess = int(input(f"猜一個 {low}~{high} 的數字:"))
count += 1
if guess == answer:
print(f"猜對了!你總共猜了 {count} 次")
break
elif guess < answer:
low = guess + 1 # 太小 → 答案一定比 guess 還大
print(f"太小了,範圍縮小到 {low}~{high}")
else:
high = guess - 1 # 太大 → 答案一定比 guess 還小
print(f"太大了,範圍縮小到 {low}~{high}")版本四:讓玩家自訂範圍
最後一步,把寫死的 1~100 改成開場讓玩家自己決定。只要把上下限改成 input 進來,再交給 random.randint 就好:
import random
low = int(input("範圍最小值:"))
high = int(input("範圍最大值:"))
answer = random.randint(low, high)
count = 0
while True:
guess = int(input(f"猜一個 {low}~{high} 的數字:"))
count += 1
if guess == answer:
print(f"猜對了!你總共猜了 {count} 次")
break
elif guess < answer:
low = guess + 1
print(f"太小了,範圍縮小到 {low}~{high}")
else:
high = guess - 1
print(f"太大了,範圍縮小到 {low}~{high}")小結
猜數字這題把兩個最核心的流程控制都用上了:迴圈負責「重複做同一件事直到某個條件」,判斷式負責「依情況走不同的路」。這兩個觀念不是靠讀懂的,是靠手敲出來、看它跑起來才會真的內化。
把上面四個版本自己一個一個敲過一遍,遠比看十遍教學有用。想再多練幾題 while 和 if,到 程式練習題庫 挑幾題難度剛好的來寫——挑戰題還可以試著把這個遊戲反過來,讓「電腦來猜、你回答太大太小」,看它幾次能猜中。