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等。