十三遊戲
法國著名的組合學家 Pierre Raymond De Montmart 提出了一個簡單的遊戲,稱為「十三遊戲」。你有一副 13 張的牌,編號從 1 到 13。先將牌洗勻,然後一次抽一張。當牌面數字與抽出的順序相同時,就稱為一次「巧合」。例如,第 5 張你抽到 5,這就是巧合。若你能抽完整副牌而沒有出現任何巧合,就算贏。讓我們用模擬來估計在這個遊戲中獲勝的機率。
完成此練習後,你將更能把抽象問題轉換為用來估計機率的模擬框架。
本練習屬於課程
Python 的統計模擬
練習說明
- 每次試玩時,從
deck中「不放回」地抽出「全部」的牌,並指派給draw。 - 檢查這次抽牌是否出現任何巧合;若有,將計數器
coincidences加 1。 - 以沒有任何巧合的遊戲次數所佔比例計算獲勝機率,並用
prob_of_winning印出結果。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Pre-set constant variables
deck, sims, coincidences = np.arange(1, 14), 10000, 0
for _ in range(sims):
# Draw all the cards without replacement to simulate one game
draw = np.random.choice(____, size=____, replace=____)
# Check if there are any coincidences
coincidence = (draw == list(np.arange(1, 14))).any()
if coincidence == ____:
coincidences += 1
# Calculate probability of winning
prob_of_winning = ____
print("Probability of winning = {}".format(____))