終極密碼猜數字(Guess the Number)
這篇 Python 實作教學要把第一階段學到的東西全部用上:變數、運算子、字串 f-string、input 輸入、if else 判斷、while 迴圈。我們要做的是經典的「終極密碼」遊戲——電腦隨機選一個 1 到 100 的數字,玩家在不斷縮小的範圍內猜中它。
遊戲規則:
| 規則 | 說明 |
|---|---|
| 答案範圍 | 程式啟動時從 1~100 隨機選一個整數 |
| 玩家猜測 | 每回合顯示目前範圍,玩家輸入一個數字 |
| 範圍縮小 | 猜太大或太小時,提示並更新範圍 |
| 遊戲結束 | 猜中時顯示總共猜了幾次 |
完整程式碼
建立 guess_number.py:
import random
# 初始設定
answer = random.randint(1, 100) # 隨機產生 1~100 的答案
low = 1 # 目前範圍下限
high = 100 # 目前範圍上限
count = 0 # 猜測次數
print("=== 終極密碼 ===")
while True:
guess = int(input(f"請猜 {low}~{high} 之間的數字:"))
# 檢查輸入是否在範圍內
if guess < low or guess > high:
print(f"超出範圍,請輸入 {low}~{high} 之間的數字")
continue
count = count + 1
if guess == answer:
print(f"恭喜猜中!答案是 {answer},總共猜了 {count} 次")
break
elif guess < answer:
low = guess + 1
print("太小了!")
else:
high = guess - 1
print("太大了!")
執行範例(假設答案是 66):
=== 終極密碼 ===
請猜 1~100 之間的數字:50
太小了!
請猜 51~100 之間的數字:75
太大了!
請猜 51~74 之間的數字:66
恭喜猜中!答案是 66,總共猜了 3 次
程式逐段解說
1. 產生隨機答案
import random
answer = random.randint(1, 100)
random 是 Python 內建的隨機數模組,randint(1, 100) 回傳 1~100 之間的隨機整數(含兩端,這點和 range 不同)。import 的細節會在第 23 篇模組與套件詳細介紹,目前先會用即可。
2. 遊戲主迴圈
while True:
guess = int(input(f"請猜 {low}~{high} 之間的數字:"))
猜數字「不知道要猜幾次」,所以用 while True 無限迴圈,猜中時用 break 結束。input() 回傳字串,記得用 int() 轉成整數才能比較大小。
3. 範圍檢查與 continue
if guess < low or guess > high:
print(f"超出範圍,請輸入 {low}~{high} 之間的數字")
continue
輸入超出目前範圍時,continue 跳過本輪剩下的程式碼直接重新輸入,而且不計入猜測次數(count 還沒加)。
4. 判斷與縮小範圍
if guess == answer:
...
break
elif guess < answer:
low = guess + 1
else:
high = guess - 1
三種情況:猜中(break 結束)、太小(下限變成猜的數字 +1)、太大(上限變成猜的數字 -1)。範圍會越縮越小,這就是「終極密碼」的玩法。
挑戰練習
學會基本版後,試著自己加上這些功能:
- 限制次數:最多猜 7 次,沒猜中就公布答案(提示:把
while True改成while count < 7,迴圈結束後判斷是否猜中) - 防呆輸入:玩家輸入英文字會讓
int()報 ValueError 直接當掉,等第 25 篇學了 try except 就能優雅處理 - 再玩一局:猜中後詢問是否重新開始
總結
這個小遊戲用到了第一階段的所有核心語法:random.randint() 產生答案、while True + break 控制流程、int(input()) 取得數字輸入、if / elif / else 判斷並縮小範圍、f-string 顯示動態訊息。能獨立寫出(或看懂並修改)這支程式,第一階段就過關了。下一階段我們進入 Python 的資料結構,從最重要的 List 開始。