互動闖關
1A2B 猜數字 選擇題挑戰
用選擇題一步步寫出完整遊戲!
A = 數字對、位置也對
B = 數字對、但位置不對
答案 1234,猜 1325 → 1A2B
1 在正確位置(A),3 和 2 有猜到但位置錯(B)
Chapter 1
遊戲設定 & 取得輸入
先把答案寫死,學會取得玩家猜測
Chapter 1 — Q1
如何儲存 4 位數答案?
我們用字串 存答案,這樣等等可以一個一個字元比對
選出正確的寫法:
answer = 1234
answer = "1234"
answer = [1, 2, 3, 4]
Chapter 1 — Q2
取得玩家的猜測
answer = "1234"
______
空格要填什麼?
guess = input("請猜 4 個數字:")
guess = int(input("請猜 4 個數字:"))
guess = print("請猜 4 個數字:")
Chapter 1 — Q3
取出答案的第 1 個數字
字串可以用 [索引] 取出單一字元,索引從 0 開始
answer = "1234"
print(answer[0])
print(answer[1])
answer = "5678",answer[2] 是什麼?
"6"
"8"
"7"
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
空格要填什麼?
for i in range(1, 4):
for i in range(4):
for i in [1, 2, 3, 4]:
Chapter 2 — Q2
比較全部 4 個位置
哪一段能正確計算出所有的 A?
a = 0
if answer == guess:
a = 4
a = 0
for i in range(4):
if answer[i] in guess:
a = a + 1
a = 0
for i in range(4):
if answer[i] == guess[i]:
a = a + 1
Chapter 2 — Q3
驗算一下!
answer = "1234"
guess = "1325"
A 應該是多少?
A = 1(只有 i=0 的 "1" 位置正確)
A = 2("1" 和 "3" 都對)
A = 0(都不對)
Chapter 3
計算 B(數字對但位置錯)
數字有出現在答案中,但不在那個位置
Chapter 3 — Q1
認識 in 運算子
"3" in "1234" 回傳 True,因為 "3" 出現在 "1234" 裡
answer = "1234"
print("5" in answer)
上面會印出什麼?
True
False
會報錯
Chapter 3 — Q2
B 的判斷邏輯
B = 數字有在答案中,但位置不對 (不能跟 A 重複計算)
判斷 guess[i] 是否算 B,要符合什麼條件?
guess[i] in answer
guess[i] != answer[i]
guess[i] in answer and guess[i] != answer[i]
Chapter 3 — Q3
用 for 迴圈計算 B
哪一段能正確計算 B?
b = 0
for i in range(4):
if guess[i] in answer:
b = b + 1
b = 0
for i in range(4):
if guess[i] in answer and guess[i] != answer[i]:
b = b + 1
b = 0
for i in range(4):
if guess[i] != answer[i]:
b = b + 1
Chapter 3 — Q4
驗算練習
answer = "1234"
guess = "1325"
結果應該是幾 A 幾 B?
1A1B
1A2B(1 對位,3 和 2 數字對但位置錯)
2A1B
Chapter 4
用迴圈讓遊戲跑起來
玩家要能重複猜,直到猜對 4A0B 為止
Chapter 4 — Q1
什麼時候停止?
猜到 4A0B 代表完全正確,遊戲結束!
用 while 讓遊戲重複,哪個寫法正確?
while True:
guess = input("猜 4 個數字:")
# ... 計算 a 和 b ...
if a == 4:
print("恭喜答對!")
break
while guess != answer:
guess = input("猜 4 個數字:")
# ... 計算 a 和 b ...
for i in range(100):
guess = input("猜 4 個數字:")
# ... 計算 a 和 b ...
Chapter 4 — Q2
顯示結果提示
______
哪個寫法能印出像 1A2B 的結果?
print("a = " + a + ", b = " + b)
print(a, "A", b, "B")
print(f"{a}A{b}B")
Chapter 4 — Q3
加入猜測次數
answer = "1234"
count = 0
while True:
guess = input("猜 4 個數字:")
______
# ... 計算 a, b ...
空格要填什麼?
count = 1
count += 1
count + 1
Chapter 4 — Q4
每回合要重算 A 和 B
每次猜測都要重新從 0 開始算,否則會越加越多!
a = 0 和 b = 0 應該放在哪裡?
放在 while 的前面(迴圈外面)
放在 while 裡面、每次 input 之後(迴圈裡面)
放在程式的最後面
Chapter 5
用函式整理 & 隨機答案
把 AB 計算包成函式,再加上隨機出題
Chapter 5 — Q1
把 A 的計算包成函式
函式可以接收參數、回傳結果,讓程式更好讀
哪個正確定義了計算 A 的函式?
def count_a(answer, guess):
a = 0
for i in range(4):
if answer[i] == guess[i]:
a += 1
def count_a(answer, guess):
a = 0
for i in range(4):
if answer[i] == guess[i]:
a += 1
return a
def count_a():
a = 0
for i in range(4):
if answer[i] == guess[i]:
a += 1
return a
Chapter 5 — Q2
把 B 的計算也包成函式
def count_b(answer, guess):
b = 0
for i in range(4):
______
b += 1
return b
空格要填什麼?
if guess[i] in answer:
if guess[i] != answer[i]:
if guess[i] in answer and guess[i] != answer[i]:
Chapter 5 — Q3
產生隨機答案
import random 可以用亂數功能
random.sample("0123456789", 4) 從 10 個數字中隨機挑 4 個不重複的
回傳一個 list,例如 ["3", "7", "1", "5"]
用 "".join(...) 把 list 合併成字串 "3715"
哪個能產生 4 位不重複的隨機答案字串?
answer = random.randint(1000, 9999)
answer = random.sample("0123456789", 4)
answer = "".join(random.sample("0123456789", 4))
Chapter 5 — Q4
輸入檢查
玩家可能輸入錯誤(不是 4 位數),用 len() 檢查長度
guess = input("猜 4 個數字:")
______
print("請輸入 4 個數字!")
continue
空格要填什麼?
if guess != 4:
if len(guess) != 4:
if guess.length != 4:
Chapter 5 — Q5
呼叫函式取得結果
______
______
print(f"{a}A{b}B")
空格要填什麼?
a = count_a(answer, guess)
b = count_b(answer, guess)
count_a(answer, guess)
count_b(answer, guess)
a = count_a()
b = count_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
▶ 到 Playground 試試看
闖關完成!
你已經學會了:
字串索引 [0] • in 運算子 • for 迴圈比對
def 函式封裝 • while + break
挑戰:試試加入「限制 10 次機會」或「不能輸入重複數字」的功能!