本次练习是通过python的pygal来模拟掷骰子的结果。我先创造了一个骰子类(Die),这个类的骰子都有6个面,点数分别是1~6。然后由这个类创建两个实例die1和die2。模拟的是随机投掷这两个筛子n次,输出这n次的投掷结果。为了方便分析,我输出了这n(n=1000)次投掷中,不同点数出现的次数,并绘制了条形图。具体代码如下:
import matplotlib.pyplot as plt import pygal from random import randint #创建Die骰子类 class Die(): def __init__(self,num_sides=6): self.num_sides=num_sides def roll(self): return randint(1,self.num_sides) #创建实例 die1=Die() die2=Die() result=[] #将每次投掷的点数和存储在列表frequences中 for n in range(1000): a=die1.roll()+die2.roll() result.append(a) frequences=[] #统计各个点数和出现的次数并绘图 for value in range(2,die1.num_sides+die2.num_sides+2): frequency=result.count(value) frequences.append(frequency) #print("%d : %d"%(value,frequency)) print(frequences) hist=pygal.Bar() hist.title="Result of rolling one D6 1000 times" hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12'] hist.x_title="Result" hist.y_title="Frequency of result" hist.add('D6',frequences) hist.render_to_file('die_visual.svg')
输出如下(截图):
输出的图片为svg格式,当鼠标指向某一点数时,会显示出该点数出现的次数。由上图发现,当同时投掷两个6面筛子,各点数出现的次数符合正态分布。这一分布也符合数学逻辑。投掷一次所有可能出现的结果如下:
由上图可以看出共有11中结果,不同结果出现的次数是不一样的。所以各点数和出现的概率为:
各个点数出现的概率也服从正态分布,结果和投掷1000次的结果吻合。