使用pygal統計投擲N次骰子之後點數的分布情況
阿新 • • 發佈:2018-01-10
可視化 clas file gpo mes 計算 result 完整 次數
一、環境信息
python版本:2.7.13
pygal版本:2.4.0
pygal安裝:pip install pygal 從python官方完整下載的最新的python版本自帶pip
二、具體實現
投擲N次骰子,然後統計每個點數出現的數字。首先需要實現的是隨機點數,具體代碼如下:
dice.py
# -*- coding: utf-8 -*- #pip install pygal from random import randint class Dice(): """表示一個骰子的類""" def __init__(self, number_sides=6):"""骰子默認為6面,稱之為D6;如果是8面的骰子稱之為D8""" self.number_sides = number_sides def roll(self): """返回一個位於1和骰子面數之間的隨機值""" return randint(1, self.number_sides)
1、投擲一個6面的骰子(D6)10000次,查看每個點數的統計結果:
dice_visual.py
# -*- coding: utf-8 -*- import pygal from dice import Dice #擲一個骰子 #創建一個D6 dice = Dice()#將結果存儲在一個列表中 results = [] for roll_number in range(10000): result = dice.roll() results.append(result) #分析結果:計算每個點數出現的次數 frequencies = [] values = [] for value in range(1, dice.number_sides+1): frequency = results.count(value) #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素 frequencies.append(frequency) values.append(value)#對結果進行可視化 hist = pygal.Bar() #設置直方圖的標題 hist.title = ‘Results of rolling one D6 1000 times.‘ #設置x軸的值 hist.x_labels = values #設置x軸的標簽 hist.x_title = ‘Result‘ #設置y軸的標題 hist.y_title = ‘Frequency of Result‘ #將x軸標簽的值添加到直方圖中 hist.add(‘D6‘, frequencies) #將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件 hist.render_to_file(‘dice_visual.svg‘)
打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:
2、同時投擲兩個6面的骰子(D6)10000次,查看每個點數的統計結果,只需要修改dice_visual.py:
dice_visual.py
# -*- coding: utf-8 -*- import pygal from dice import Dice #同時擲兩個6面的骰子10000次 dice1 = Dice() dice2 = Dice() #將結果存儲在一個列表中 results = [] for roll_number in range(10000): result1 = dice1.roll() result2 = dice2.roll() results.append(result1 + result2) #分析結果:計算每個點數出現的次數 frequencies = [] values = [] for value in range(2, dice1.number_sides+dice2.number_sides+1): frequency = results.count(value) #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素 frequencies.append(frequency) values.append(value) #對結果進行可視化 hist = pygal.Bar() #設置直方圖的標題 hist.title = ‘Results of rolling one D6 1000 times.‘ #設置x軸的值 hist.x_labels = values #設置x軸的標簽 hist.x_title = ‘Result‘ #設置y軸的標題 hist.y_title = ‘Frequency of Result‘ #將x軸標簽的值添加到直方圖中 hist.add(‘D6 + D6‘, frequencies) #將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件 hist.render_to_file(‘dice_visual.svg‘)
打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:
3、同時投擲一個6面的骰子(D6)和一個10面的骰子(D10)10000次,查看每個點數的統計結果,只需要修改dice_visual.py:
dice_visual.py
# -*- coding: utf-8 -*- import pygal from dice import Dice #擲兩個個骰子,一個6面,一個10面 dice1 = Dice() dice2 = Dice(10) #將結果存儲在一個列表中 results = [] for roll_number in range(10000): result1 = dice1.roll() result2 = dice2.roll() results.append(result1 + result2) #分析結果:計算每個點數出現的次數 frequencies = [] values = [] for value in range(2, dice1.number_sides+dice2.number_sides+1): frequency = results.count(value) #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素 frequencies.append(frequency) values.append(value) #對結果進行可視化 hist = pygal.Bar() #設置直方圖的標題 hist.title = ‘Results of rolling one D6 1000 times.‘ #設置x軸的值 hist.x_labels = values #設置x軸的標簽 hist.x_title = ‘Result‘ #設置y軸的標題 hist.y_title = ‘Frequency of Result‘ #將x軸標簽的值添加到直方圖中 hist.add(‘D6 + D10‘, frequencies) #將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件 hist.render_to_file(‘dice_visual.svg‘)
打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:
使用pygal統計投擲N次骰子之後點數的分布情況