一、环境信息
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文件(可以用浏览器直接打开),结果图如下:
来源:https://www.cnblogs.com/dbtd/p/8257592.html