pygal模拟掷骰子

    本次练习是通过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次的结果吻合。


猜你喜欢

转载自blog.csdn.net/weixin_42036641/article/details/80346747