Home » Python » Pythonでサイコロの各目が出る確率を

Pythonでサイコロの各目が出る確率を

動作検証バージョン:Windows 11 Home + Python 3.10.11 + Jupyter Notebook 6.5.3

サイコロの目が、奇数なのか偶数なのかを判定するPythonのコードをご紹介しました。

サイコロをふる回数を、100回・1000回・10000回のように変更したときに、1から6の各目の出る確率がどれくらい変化するかを確認したくなったので、スクリプトを作ってみました。

[スポンサードリンク]

サイコロの各目が出る確率を求めるサンプルスクリプト

さまざまな作り方が考えられますが、標準ライブラリのcollectionsモジュールを使うと、シンプルなスクリプトになると思います。

import random, collections

N = 100

rslt = []
for _ in range(N):
    x = random.randint(1, 6)
    rslt.append(x)

rslt.sort()
for num, count in collections.Counter(rslt).items():
    print(num, count, f'{count / N : .2%}')

上記のスクリプトを実行すると、100回の試行の中で、1から6の各目が何回出たのかと、そのパーセンテージが以下のように出力されます。

1 15 15.00%
2 14 14.00%
3 26 26.00%
4 20 20.00%
5 14 14.00%
6 11 11.00%

import文の直後の行、

N = 100

の右辺を変更することで、試行回数を変えられます。

N = 1000にすると、

1 155 15.50%
2 156 15.60%
3 166 16.60%
4 171 17.10%
5 180 18.00%
6 172 17.20%

N = 10000にした場合、

1 1683 16.83%
2 1627 16.27%
3 1668 16.68%
4 1734 17.34%
5 1659 16.59%
6 1629 16.29%

N = 100000ならば、

1 16612 16.61%
2 16743 16.74%
3 16539 16.54%
4 16614 16.61%
5 16668 16.67%
6 16824 16.82%

更にN = 1000000なら、

1 166439 16.64%
2 166566 16.66%
3 166957 16.70%
4 166708 16.67%
5 166499 16.65%
6 166831 16.68%

のような出力が行われ、徐々に16.67%に収束する様子を観察できます。

サンプルスクリプトで行っている処理

上記のスクリプトで行っている処理は以下のとおりです。

モジュールのインポートと試行回数の指定

まずは、利用するモジュールのインポートです。

import random, collections

randomモジュールは1から6の整数を取得するために、collectionsモジュールは各目の出た回数と確率を計算するために使用します。
次の、

N = 100

が、サイコロを何回ふるかを指定している行です。

サイコロをふって出た目をリストに追加

つづく、

rslt = []
for _ in range(N):
    x = random.randint(1, 6)
    rslt.append(x)

は、サイコロをN回ふって、出た目をリストrsltに追加する処理です。

変数名の「rslt」は、結果を意味する「result」の短縮形です。

空っぽのリストrsltを用意しておいて、

rslt = []

変数Nに指定された回数だけfor文を回します。

for _ in range(N):

このとき、何回目かという回数はforブロックの中では使わないので、変数は「_」にしています。

randomモジュールのrandint関数で、1から6のいずれかの整数を取得して、変数xに代入して、

    x = random.randint(1, 6)

変数xをリストrsltに追記しています。

    rslt.append(x)

それぞれの目の出た回数と確率の出力

N回試行したサイコロの目がすべてリストrsltに入力されたら、出力です。

1から6の順に出力されるように、リストrsltを昇順で並べ替えておきます。

rslt.sort()

collectionsモジュールの、Counterオブジェクトが持つitemsメソッドを使ってkeyとvalueを取得して、keyであるサイコロの目を変数num、valueである出た回数を変数countに入力しています。

for num, count in collections.Counter(rslt).items():

forブロック内で、サイコロの目(num)、出た回数(count)、目が出た確率(count / N)を計算して出力しています。

    print(num, count, f'{count / N : .2%}')

確率は、拙著『Python入門を読み終えた人へ…1:文字列フォーマットの基本』でも解説しているf-string(フォーマット済文字列リテラル)を使って、小数点以下2位までのパーセント表記にしています。

最終更新日時:2024-01-02 10:52

[スポンサードリンク]

Home » Python » Pythonでサイコロの各目が出る確率を

「Python」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.