用ploty 模拟掷两个8面的骰子

创建一个名为die的文件

导入模块

from random import randint

创建Die 类,方法 __init__ () 接受一个可选参数 , 将八面的骰子命名为D8

class Die:
"""创建一个表示骰子的类"""
    def __init__(self,num_sides=8):
"""骰子为8面"""
        self.num_sides=num_sides

def roll(self):
"""返回一个位于1到骰子面数的数"""
        return randint(1,self.num_sides)

方法roll()使用函数来返回一个位于 1 和面数之间的随机数 ,这个随机数可能返回1 ,终止值(8)或这两个值之间的任何整数

本文写的是八面的骰子,所以终止值为8

接下来创建一个名为die_visual 的文件 ,这个文件执行的的是掷骰子

创建图表前,先来掷两个D8 ,看看结果是否合理

from die import Die
die_1=Die()
die_2=Die()
#计算结果
#创建一个用于存储结果的列表
results=[]

for i in range(1000):
    result=die_1.roll()+die_2.roll()
    results.append(result)
print(results)

部分结果如上图所示,由于结果太多没全部展示出来,掷两个八面的骰子最小结果应该是2,最大结果应该是16,可以去验证一下

输入这四行代码

result1=max(results)
result2=min(results)
print(result1)
print(result2)

运行之后的结果是正确的,正如我们预期的那样

分析结果

max_result=die_1.num_sides+die_2.num_sides
frequencies=[]

for vules in range(2,max_result+1):
    frequency=results.count(vules)
    frequencies.append(frequency)
print(frequencies)

使用计算个数的count() 函数

运行之后显示各个结果出现的个数,结果合理

接下来绘制直方图

from plotly.graph_objs import Bar,Layout
from plotly import offline

x_values=list(range(2,max_result+1))
data=[Bar(x=x_values,y=frequencies)]

x_axis={'title':'结果','dtick':1}
y_axis={'title':'结果的频率'}

my_layout=Layout(title='掷两个D8一千次的结果',xaxis=x_axis,yaxis=y_axis)
offline.plot({'data':data,'layout':my_layout},filename='d8.html')

1、plotly 不能直接接收range() 的结果 ,需要使用函数list() 将其转化为列表

2、ploty 类 Bar()表示用于绘制条形图的数据集

3、类Layout() 返回一个指定图表布局和配置的对象

运行之后的结果

根据条形图的结果可知,掷两个八面的骰子1000次,两个数相加的结果是9的概率最大

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值