皆さん
こんにちは、こんばんは
TomoProgです。
なんか昨日一日で約50PVぐらいされたようで、今月も100PVを達成出来ました!!
多くの人に見ていただけるのは非常にありがたいことです。
これからもマイペースに記事を書いていけたらと思います。
今回はサイコロの確率をPythonで計算してみました。
それでは頑張っていきましょう。
6回振れば1回は出るって本当?
ふと思ったんです。
サイコロを振って指定した目が出る確率は6分の1です。
でも、実際に6回振っても出ないときもある・・・
じゃあだいたい何回振れば6分の1になるんだろう?
今回はこんな疑問をPythonで解いていこうと思います。
サイコロプログラムを書く
まずはサイコロをプログラムで書いてみます。
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回サイコロを振ってみた結果は以下のようになりました。
6分の1で出るのであれば
それぞれの出た回数が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を使用する環境が整ったので、先ほどのサイコロプログラムを改良し、円グラフを表示してみます。
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の中身の内容で円グラフを書くように指定しています。
実際に実行して表示してみます。
|