来源:《Python编程:从入门到实践》
目录
1、安装Pygal
python -m pip install --user pygal
2、Pygal画廊
http://www.pygal.org/, >Documentation,>Chart types。
查看图表
3、创建Die类
die.py
from random import randint class Die(): """表示一个骰子的类""" def __init__(self, num_sides=6): """骰子默认为6面""" self.num_sides = num_sides def roll(self): """返回一个1和骰子面数之间的随机数""" return randint(1, self.num_sides)
方法roll() 使用函数randint() 来返回一个1和面数之间的随机数
4、掷骰子
die_visual.py
from die import Die # 创建一个D6 die = Die() # 掷几次骰子, 并将结果存储在一个列表中 results = [] for roll_num in range(100): result = die.roll() results.append(result) print(results)
5、分析结果
计算每个点数出现的频率
die_visual.py
from die import Die # 创建一个D6 die = Die() # 掷几次骰子, 并将结果存储在一个列表中 results = [] for roll_num in range(1000): result = die.roll() results.append(result) # 分析结果 frequencies = [] for value in range(1, die.num_sides+1): frequency = results.count(value) frequencies.append(frequency) print(frequencies)
得到每个点数出现的频率
6、绘制直方图
根据频率列表,绘制表示结果的直方图
die_visual.py
from die import Die import pygal # 创建一个D6 die = Die() # 掷几次骰子, 并将结果存储在一个列表中 results = [] for roll_num in range(1000): result = die.roll() results.append(result) # 分析结果 frequencies = [] for value in range(1, die.num_sides+1): frequency = results.count(value) frequencies.append(frequency) # 对结果进行可视化 hist = pygal.Bar() hist.title = "Results of rolling one D6 1000 times." hist.x_labels = ['1', '2', '3', '4', '5', '6'] hist.x_title = "Result" hist.y_title = "Frequency of Result" hist.add('D6', frequencies) hist.render_to_file('die_visual.svg')
为创建条形图, 创建了一个pygal.Bar() 实例, 并将其存储在hist 中
将这个图表渲染为一个SVG文件, 这种文件的扩展名必须为.svg。
7、同时掷两个骰子
创建两个D6骰子,并将两个骰子的点数相加,把结果存在results中
dice_visual.py
from die import Die import pygal # 创建一个D6 die_1 = Die() die_2 = Die() # 掷几次骰子, 并将结果存储在一个列表中 results = [] for roll_num in range(1000): result = die_1.roll() + die_2.roll() results.append(result) # 分析结果 frequencies = [] max_result = die_1.num_sides + die_2.num_sides for value in range(1, max_result+1): frequency = results.count(value) frequencies.append(frequency) # 对结果进行可视化 hist = pygal.Bar() hist.title = "Results of rolling two D6 1000 times." hist.x_labels = ['1','2','3','4','5','6','7','8','9','10','11','12'] hist.x_title = "Result" hist.y_title = "Frequency of Result" hist.add('D6 + D6', frequencies) hist.render_to_file('dice_visual.svg')
8、同时掷两个面数不同的骰子
创建一个6面骰子和一个10面骰子,同时掷这两个骰子50,000次
different_dice.py
from die import Die import pygal # 创建一个D6和一个D10 die_1 = Die() die_2 = Die(10) # 掷几次骰子, 并将结果存储在一个列表中 results = [] for roll_num in range(5000): result = die_1.roll() + die_2.roll() results.append(result) # 分析结果 frequencies = [] max_result = die_1.num_sides + die_2.num_sides for value in range(1, max_result+1): frequency = results.count(value) frequencies.append(frequency) # 对结果进行可视化 hist = pygal.Bar() hist.title = "Results of rolling two D6 1000 times." hist.x_labels = ['1','2','3','4','5','6','7','8','9','10', '11','12','13','14','15','16'] hist.x_title = "Result" hist.y_title = "Frequency of Result" hist.add('D6 + D6', frequencies) hist.render_to_file('different_dice.svg')