首先我们需要创建一个表示骰子的类,骰子是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')
结果如下图