15.4 使用Pygal模拟掷骰子
'''创建一个骰子类die.py'''
from random import randint
class Die():
'''表示一个骰子的类'''
def __init__(self,num_sides=6):
#骰子默认为6面
self.num_sides=num_sides
def roll(self):
#模拟掷骰子
return randint(1,self.num_sides)
'''模拟同时掷两个骰子,点数之和可能出现的结果die_visual.py'''
from die import Die
import pygal
#分别创建一个6面和10面的骰子
die_1=Die()
die_2=Die(10)
#将投掷结果存储在列表中
results=[]
for roll_num in range(5000):
result=die_1.roll()+die_2.roll()
results.append(result)
#上述四行语句以列表解析形式表示为:
#results=[die_1.roll()+die_2.roll() for roll_num in range(5000)]
max_results=die_1.num_sides+die_2.num_sides
#统计各点数出现的次数
frequencies=[]
for value in range(2,max_results+1):
#统计各点数出现多少次
frequency=results.count(value)
frequencies.append(frequency)
#上述四行语句以列表解析形式表示为:
#frequencies=[results.count(value) for value in range(2,max_results+1)]
#对结果进行可视化
#绘制直方图
hist=pygal.Bar()
hist.title="Results of rolling a D6 and D10 5000 times"
#绘制x轴标签
hist.x_labels=list(range(2,max_results+1))
#hist.x_labels=[value for value in range(2,max_results+1)]
#轴标题
hist.x_title="Result"
hist.y_title="Frequency of result"
#为数据frequencies添加数据系列(图例)
hist.add('D6+D10',frequencies)
#保存文件为svg格式
hist.render_to_file('die_visual.svg')