だれでもポケカプログラミング その2 マリガンの確率②
マリガンになる確率をシミュレーションするプログラム、3分で作るぞって話の続き。前回の記事はこれ。
前回書いたコードは下記の5行でしたな。
デッキ = ['たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他']
手札 = []
#デッキをシャッフル
random.shuffle(デッキ)
#手札を7枚引く
for i in range(7):
手札.append(デッキ.pop())
これで手札7枚引くシミュレーションはできてますんで、これを100万回繰り返して何回マリガンが発生するか集計してみます。
for i in range(1000000)
これ1行を追加すると100万回繰り返すになります。
マリガン回数カウント = 0
マリガンが発生したらマリガン回数カウントをプラス1していきましょう。
if 'たねポケ' not in 手札:
マリガン回数カウント += 1
手札にたねポケがなかったらマリガン回数カウントをプラス1するというコードです。if文については詳しくは下記を参照。
https://www.google.com/search?q=python+if+not+in
#シャッフルに必要なもの
import random
試行回数 = 1000000
マリガン回数カウント = 0
for i in range(試行回数):
デッキ = ['たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ', 'たねポケ',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他',
'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他', 'その他']
手札 = []
#デッキをシャッフル
random.shuffle(デッキ)
#手札を7枚引く
for i in range(7):
手札.append(デッキ.pop())
#たねポケが1枚もない場合マリガンカウント
if 'たねポケ' not in 手札:
マリガン回数カウント += 1
マリガンになる確率 = マリガン回数カウント / 試行回数
print("試行回数\t" + str(試行回数))
print("マリガン回数カウント\t" + str(マリガン回数カウント))
print("マリガンになる確率\t" + '{:.2%}'.format(マリガンになる確率))
ちょっと修正しましたがこんな感じ。100万回まわしたら25.9万回マリガンになったので、マリガンになる確率は25.9%!理論値は25.86%なのでほぼほぼ一致!
3分で完成しましたな~!次回はサイドに入る確率なんかを調べてみますかね。
コメント機能がないので何かあればXのDMへどうぞ。
次の記事