使用Pygal统计掷骰子情况

首先我们需要创建一个表示骰子的类,骰子是6面的,创建一个类Touzi,这个类定义了自己的属性size=6,定义了掷骰子的方法zhitouzi,这个方法返回一个1-6的随机数,这里用randint方法返回。

python种的random.randint(a,b)方法用于生成一个属于a,b之间(包括a,b)的随机整数,要使用randint需要从random库导入

from random import randint
import pygal
class Touzi():
    def __init__(self,size=6):
        self.size=size
    def zhitouzi(self):
        return randint(1,self.size)

我们创建了一个骰子,接下来我们调用它,看看是不是返回了一个1-6的数

touzi=Touzi()
a=touzi.zhitouzi()
print(a)

好,经运行,结果没有问题,那么,现在我们来尝试掷这个骰子100次,并获取到这100次的结果。怎么获取这100次的结果呢,我们掷这个骰子100次该怎么体现呢。
我们需要用range()函数,range函数时python内置函数,用于创建一个整数列表,range(b)默认从0开始,range(a,b),从a开始,到b结束,但不包括b,一般用在for循环,这个for循环里面,我们调用zhitouzi()方法获取此次掷骰子的值,然后把这个值存到一个列表里面,由此我们要创建一个空列表。

results=[]
for value in range(100):
    result=touzi.zhitouzi()
    results.append(result)
print(results)

如此,我们就得到了一个包含100次掷骰子结果的列表。
现在我们来分析这个结果,统计每个数字出现的次数,需要创建一个空列表来存储这些次数,然后使用for循环,从1-7使用count方法统计每个数字出现的次数。
count() 方法用于统计字符串里某个字符出现的次数

counts=[]
for value in range(1,7):
    count=results.count(value)
    counts.append(count)
print(counts)

有了频率列表后,我们就可以绘制一个表示结果的直方图。我们需要用到pygal库,pygal是一个SVG图表库。SVG是一种矢量图格式。全称Scalable Vector Graphics – 可缩放矢量图形。用浏览器打开svg,可以方便的与之交互。

hist=pygal.Bar()
hist.title="Rolling 100 times"
hist.x_labels=range(1,7)
hist.x_title='value'
hist.y_title='count results'
hist.add('D6',counts)
hist.render_to_file('csdn.svg')

结果如下图
在这里插入图片描述
如上就是掷一枚骰子的结果,那么,如果同时掷两枚骰子呢,那么结果就不再只限于1-6了,而是2-12.经过修改后,掷两枚骰子,完整代码如下

from random import randint
import pygal
class Touzi():
    def __init__(self,size=6):
        self.size=size
    def zhitouzi(self):
        return randint(1,self.size)
touzi_1=Touzi()
touzi_2=Touzi()
results=[]
for value in range(100):
    result=touzi_1.zhitouzi()+touzi_2.zhitouzi()
    results.append(result)
counts=[]
for value in range(2,13):
    count=results.count(value)
    counts.append(count)

hist=pygal.Bar()
hist.title="Rolling 100 times"
hist.x_labels=range(2,13)
hist.x_title='value'
hist.y_title='count results'
hist.add('D6+D6',counts)
hist.render_to_file('csdn.svg')

结果如下图
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章