← 返回大綱
互動闖關

1A2B 猜數字
選擇題挑戰

用選擇題一步步寫出完整遊戲!

A = 數字對、位置也對
B = 數字對、但位置不對

答案 1234,猜 13251A2B
1 在正確位置(A),3 和 2 有猜到但位置錯(B)

Chapter 1

遊戲設定 & 取得輸入

先把答案寫死,學會取得玩家猜測

Chapter 1 — Q1

如何儲存 4 位數答案?

我們用字串存答案,這樣等等可以一個一個字元比對

選出正確的寫法:

Chapter 1 — Q2

取得玩家的猜測

answer = "1234" ______ # 請玩家輸入 4 個數字

空格要填什麼?

Chapter 1 — Q3

取出答案的第 1 個數字

字串可以用 [索引] 取出單一字元,索引從 0 開始
answer = "1234" print(answer[0]) # 印出 "1" print(answer[1]) # 印出 "2"

answer = "5678"answer[2] 是什麼?

Chapter 2

計算 A(位置正確)

for 迴圈逐位比對:同位置、同數字 = 1A

Chapter 2 — Q1

用 for 迴圈走訪 4 個位置

range(4) 會產生 0, 1, 2, 3 — 剛好對應字串的 4 個索引
answer = "1234" guess = "1325" a = 0 ______ if answer[i] == guess[i]: a = a + 1

空格要填什麼?

Chapter 2 — Q2

比較全部 4 個位置

哪一段能正確計算出所有的 A?

Chapter 2 — Q3

驗算一下!

answer = "1234" guess = "1325" # i=0: "1"=="1" ✓ i=1: "2"=="3" ✗ i=2: "3"=="2" ✗ i=3: "4"=="5" ✗

A 應該是多少?

Chapter 3

計算 B(數字對但位置錯)

數字有出現在答案中,但不在那個位置

Chapter 3 — Q1

認識 in 運算子

"3" in "1234" 回傳 True,因為 "3" 出現在 "1234" 裡
answer = "1234" print("5" in answer) # ?

上面會印出什麼?

Chapter 3 — Q2

B 的判斷邏輯

B = 數字有在答案中,但位置不對(不能跟 A 重複計算)

判斷 guess[i] 是否算 B,要符合什麼條件?

Chapter 3 — Q3

用 for 迴圈計算 B

哪一段能正確計算 B?

Chapter 3 — Q4

驗算練習

answer = "1234" guess = "1325" # i=0: "1" in "1234"? ✓ 但 "1"=="1" 位置也對 → 不算 B(是 A) # i=1: "3" in "1234"? ✓ 且 "3"!="2" 位置不對 → B! # i=2: "2" in "1234"? ✓ 且 "2"!="3" 位置不對 → B! # i=3: "5" in "1234"? ✗ → 不算

結果應該是幾 A 幾 B?

Chapter 4

用迴圈讓遊戲跑起來

玩家要能重複猜,直到猜對 4A0B 為止

Chapter 4 — Q1

什麼時候停止?

猜到 4A0B 代表完全正確,遊戲結束!

while 讓遊戲重複,哪個寫法正確?

Chapter 4 — Q2

顯示結果提示

# 每次猜完要告訴玩家幾 A 幾 B ______

哪個寫法能印出像 1A2B 的結果?

Chapter 4 — Q3

加入猜測次數

answer = "1234" count = 0 # 紀錄猜了幾次 while True: guess = input("猜 4 個數字:") ______ # 猜測次數 +1 # ... 計算 a, b ...

空格要填什麼?

Chapter 4 — Q4

每回合要重算 A 和 B

每次猜測都要重新從 0 開始算,否則會越加越多!

a = 0b = 0 應該放在哪裡?

Chapter 5

用函式整理 & 隨機答案

把 AB 計算包成函式,再加上隨機出題

Chapter 5 — Q1

把 A 的計算包成函式

函式可以接收參數、回傳結果,讓程式更好讀

哪個正確定義了計算 A 的函式?

Chapter 5 — Q2

把 B 的計算也包成函式

def count_b(answer, guess): b = 0 for i in range(4): ______ b += 1 return b

空格要填什麼?

Chapter 5 — Q3

產生隨機答案

import random 可以用亂數功能
random.sample("0123456789", 4) 從 10 個數字中隨機挑 4 個不重複的
回傳一個 list,例如 ["3", "7", "1", "5"]
"".join(...) 把 list 合併成字串 "3715"

哪個能產生 4 位不重複的隨機答案字串?

Chapter 5 — Q4

輸入檢查

玩家可能輸入錯誤(不是 4 位數),用 len() 檢查長度
guess = input("猜 4 個數字:") ______ print("請輸入 4 個數字!") continue # 跳過這回合,重新猜

空格要填什麼?

Chapter 5 — Q5

呼叫函式取得結果

# 在 while 迴圈裡呼叫剛才寫好的函式 ______ ______ print(f"{a}A{b}B")

空格要填什麼?

Chapter 5 — 完整程式碼

恭喜完成!完整的 1A2B

import random def count_a(answer, guess): a = 0 for i in range(4): if answer[i] == guess[i]: a += 1 return a def count_b(answer, guess): b = 0 for i in range(4): if guess[i] in answer and guess[i] != answer[i]: b += 1 return b # 產生 4 位不重複的隨機數字 answer = "".join(random.sample("0123456789", 4)) count = 0 print("歡迎來玩 1A2B 猜數字!") while True: guess = input("請猜 4 個數字:") if len(guess) != 4: print("請輸入 4 個數字!") continue count += 1 a = count_a(answer, guess) b = count_b(answer, guess) print(f"結果:{a}A{b}B") if a == 4: print(f"恭喜答對!你猜了 {count} 次") break

闖關完成!

你已經學會了:
字串索引 [0]in 運算子 • for 迴圈比對
def 函式封裝 • while + break

挑戰:試試加入「限制 10 次機會」或「不能輸入重複數字」的功能!