pygal之掷骰子 - 2颗面数为6的骰子

python之使用pygal模拟掷两颗面数为6的骰子的直方图,包含三个文件,主文件,die.py,dice_visual.py,20200527.svg。其中最后一个文件为程序运行得到的结果。

1,die.py,原码如下:

 1 from random import randint
 2 
 3 class Die():
 4     '''表示一个面数为6的骰子的类'''
 5     def __init__(self,num_sides = 6):
 6         #初始化骰子的面数属性,骰子的默认面数为6
 7         self.num_sides = num_sides
 8 
 9     def roll(self):
10         #返回一个位于1和骰子面数之间的随机整数值,可以是1,也可以是num_sides,也可以是这两者之间的任意整数值
11         return randint(1,self.num_sides)

2,dice_visual.py,原码如下:

 1 from die import Die
 2 
 3 import pygal
 4 
 5 die_1 = Die() #实例化第一个骰子
 6 die_2 = Die() #实例化第二个骰子
 7 
 8 #创建空列表,用以存储掷100次返回的值
 9 results = []
10 for roll_number in range(100): #掷骰子100次
11     result = die_1.roll() + die_2.roll() #掷骰子两颗的点数
12     results.append(result) #将点数结果存储为列表
13 #print(results) #查看结果,结果都是预期的值
14 
15 #创建空列表,用以分析results里的结果用的
16 
17 frequencies = []
18 max_numbers = die_1.num_sides + die_2.num_sides #掷两颗骰子的最大点数值
19 for value in range(2,max_numbers + 1 ):
20     frequency = results.count(value) #计算每个value值在results里出现的次数;
21     frequencies.append(frequency) #将每个value值在results里出现的次数存储为列表;
22 #print(frequencies) #可以试着查看结果;
23 
24 '''对结果进行可视化'''
25 hist = pygal.Bar() #创建条形图,并将其结果存储在hist中
26 
27 hist.title = "Results of rolling two D6 100 times" #设置直方图的标题
28 hist.x_labels = ['2','3','4','5','6','7','8','9','10','11','12'] #设置脂肪图的可能的x轴的值
29 hist.x_title = "Results" #设置直方图x轴的标题
30 hist.y_title = "Frequency of Result" #设置直方图y轴的标题
31 
32 hist.add('D6+D6',frequencies) #使用add()函数将值D6+D6和列表frequencies添加到可视化的直方图中
33 
34 #在当前文件夹下保存名为20200527.svg切后缀必须为svg的文件
35 hist.render_to_file('20200527.svg')

3,20200527.svg,程序运行得到的结果。

要查看pygal生成的图片,应该使用浏览器打开,或者支持svg格式的软件。上图是程序运行结果的一种形式,并不是所有结果。要查看更多结果,可以尝试增大掷骰子的次数。比如说1000,10000等。

posted @ 2020-05-27 12:02  、一叶孤城  阅读(329)  评论(0编辑  收藏  举报