見出し画像

サイコロを5回振って5回連続1が出る確率

サイコロを5回振って5回連続1が出る確率は
((1/6)**5) = 0.0129 (有効数字3桁)
と求められる。

では、実験的にサイコロを振った場合、この得られた数値に近い値が出るだろうか。
Pythonでソースコードを書いて実際に確かめてみた。
スマートでない書き方であるのは許してほしい。

import random
import numpy as np
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
random.seed(0)

results = []

for i in range(50):
    bl = []
    sum_ = 1000000

    for i in range(sum_):
        x = []

        for i in range(5):
            x.append(random.randint(1,6))
        else:
            bl.append(x)
            
    data = np.array(bl)
    df = pd.DataFrame(data)
    
    result = (len(df[(df[0]==1)&(df[1]==1)&(df[2]==1)&(df[3]==1)&(df[4]==1)])/sum_)*100
    results.append(result)
    
ans = float(np.mean(results))

print("理論値:", Decimal(((1/6)**5)*100).quantize(Decimal("0.0001"),ROUND_HALF_UP), "%")   
print("実験値:", Decimal(ans).quantize(Decimal("0.0001"),ROUND_HALF_UP), "%")

このソースコードはサイコロを5回振ること100万回繰り返し、5回連続で1が出た回数を数え上げ、確率(ここでは外道であるが百分率の形で表記している)を算出させる。
さらにその作業を50回繰り返し、平均をとり確認している。

これを実行すると以下のような結果となった。

実行結果(有効数字3桁)
理論値は計算によって求めたもの。実験値はプログラムによって求めたものである。

計算によって求めた理論値と、プログラムで求めた実験値に大きな差はみられなかったと言えるだろう。


この記事が気に入ったらサポートをしてみませんか?