賢い人が検証した結果
私は数字が苦手なので嫌いです。そこで、広い世の中どこかに私の欲しい答えを既に検証している人がいるはず!と思い検索してみました。居ました!すごいですね。素晴らしいですね。こんなに賢い人、一度会ってみたいほどに感動しました。以下の文面や画像はその方のサイトから保守としてコピペさせていただきました。リンク先が消えている、なんてことをちょくちょく経験しているものですから。
その方のサイトのリンク先です→TomoProgの技術書

結果から書いてしまいますね

  • 大体150回くらいから6分の1の確率に近づいてくる。
  • 大体300回くらいサイコロを振れば6分の1の確率にかなり近くなる

振る回数による検証結果 ↓
100回振った場合のその時の確率

かなり偏りがありますね。納得です。

150回~240回


270回~480回


以下文面もTomoProgの技術書さんからのコピペです

皆さん
こんにちは、こんばんは
TomoProgです。

なんか昨日一日で約50PVぐらいされたようで、今月も100PVを達成出来ました!!
多くの人に見ていただけるのは非常にありがたいことです。
これからもマイペースに記事を書いていけたらと思います。

今回はサイコロの確率をPythonで計算してみました。

それでは頑張っていきましょう。

6回振れば1回は出るって本当?

ふと思ったんです。
サイコロを振って指定した目が出る確率は6分の1です。
でも、実際に6回振っても出ないときもある・・・

じゃあだいたい何回振れば6分の1になるんだろう?

今回はこんな疑問をPythonで解いていこうと思います。

サイコロプログラムを書く

まずはサイコロをプログラムで書いてみます。

#-*- coding:utf-8 -*-
          import sys
            import random
def
dice_roll(): """Content:サイコロを振る"""
   return random.randint(0, 5)
def
main(): """Content:エントリーポイント""" #----------------------------# サイコロを振る回数を取得#--------------------------------
   roll_num = int(sys.argv[1]) #--------------------------------# サイコロを振る#--------------------------------
   dice_list = [0]*6
   for
i in range(roll_num): dice_list[dice_roll()] += 1 #--------------------------------# 結果表示#--------------------------------
   print(dice_list)
if __name__ == "__main__":
main()

実行引数にサイコロを振る回数を指定します。
指定した回数分だけdice_roll関数を呼び出し、出た目の回数をカウントしていきます。

実際に100回サイコロを振ってみた結果は以下のようになりました。

実行:
$ python3 dice.py 100
実行結果:
[21, 11, 13, 11, 21, 23]

6分の1で出るのであれば

100 ÷ 6 = 16.66666....

それぞれの出た回数が16付近であればいいのですが、そうでもなさそうですね。

実行結果をグラフ化する

上記のプログラムでサイコロを振るプログラムは完成しました。
もっと沢山サイコロを降る前に、もう少し実行結果を分かりやすくするためにグラフで表示してみようと思います。

Pythonにはもちろんグラフを表示するための便利なモジュールも用意されています。
今回はmatplotlibというモジュールを使用します。

ただ、このmatplotlibは他のモジュールとの依存関係が強いのかインストールするのがかなり大変でした。
Ubuntu14.04で使用する場合は以下のコマンドを順に入力していけばインストール出来ました。

$ sudo apt-get install python3-pip
$ sudo apt-get install libfreetype6-dev
$ sudo apt-get install libxft-dev
$ sudo apt-get install libffi-dev
$ sudo pip3 install cairocffi
$ sudo pip3 install matplotlib

さて、matplotlibを使用する環境が整ったので、先ほどのサイコロプログラムを改良し、円グラフを表示してみます。



#-*- coding:utf-8 -*-
         import sys
             import random
                 import matplotlib.pyplot as plt
def dice_roll(): """Content:サイコロを振る"""
   return random.randint(0, 5)
def main(): """Content:エントリーポイント""" #--------------------------------# サイコロを振る回数を取得#--------------------------------
  roll_num = int(sys.argv[1]) #--------------------------------# サイコロを振る#--------------------------------
  dice_list = [0]*6
  for i in range(roll_num):
    dice_list[dice_roll()] += 1 ##--------------------------------## グラフ表示##--------------------------------
  fig = plt.figure(figsize=(8, 8))
  ax = fig.add_subplot(111)
   labels = [str(x) for x in range(1, 7)]
  ax.pie(dice_list, labels=labels, autopct="%1.1f%%", startangle=90, shadow=True)
  plt.show()
if __name__ == "__main__":
  main()

matplotlibを使う場合はimport文にmatplotlibを書いておきます。
import文でasを使用するとimportしたモジュールに別名を付けられるので便利です。
ax.pieでdice_listの中身の内容で円グラフを書くように指定しています。

実際に実行して表示してみます。