CHAT with me on luogo!

使用plotly模拟掷骰子

数据可视化

15.4使用plotly模拟掷骰子

die_visual.py

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

from die import Die
#创建1个D6,1个D10
die_1 = Die()
die_2 = Die(10)#10个面的骰子
#扔几次骰子并将结果存储在列表中
results = []
for roll_num in range(50_000):#投掷骰子1000次,才每次投出来的结果存储到results中
result = die_1.roll() + die_2.roll()#计算每次的总次数
results.append(result)

#分析结果
frequencies = []#存储投出来每个点数的总次数
max_result = die_1.num_sides + die_2.num_sides#将两个骰子的最大点数之和(12)存储max_result中
for value in range(2,max_result+1):#计算点数和从2到max_result各种点数的次数
frequency = results.count(value)#统计每个点数出现的总次数
frequencies.append(frequency)#结果添加到列表frequencies的末尾

#对结果进行可视化
x_values = list(range(2,max_result+1))#将可能出现的点数存储在列表x_values中
data = [Bar(x_values,y=frequencies)]#Bar()用于绘制条形图的数据集

x_axis_config = {'title':'结果','dtick':1}#x坐标轴标签
y_axis_config = {'title':'结果的概率'}#y轴坐标轴标签
my_layout = Layout(title='投掷1个6面骰子,一个10面骰子 50_000次的结果',#Layout返回一个图表布局和配置的对象,里面是(图表名称,x轴配置字典,y轴配置字典)
xaxis=x_axis_config,yaxis=y_axis_config)
offline.polt({'data':data,'layout':my_layout},filename = 'd6_d10.html')#polt(数据,布局,文件名)
print(frequencies)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

die.py

from random import randint

class Die:
'表示一个骰子的类'

<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span>num_sides<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token string">'骰子默认为六面'</span>
    self<span class="token punctuation">.</span>num_sides <span class="token operator">=</span> num_sides

<span class="token keyword">def</span> <span class="token function">roll</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token string">'返回一个位于1和骰子面数之间的随机值'</span>
    <span class="token keyword">return</span> randint<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span>self<span class="token punctuation">.</span>num_sides<span class="token punctuation">)</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2021年5月24日

posted @ 2022-04-03 13:59  qsad阿斯顿  阅读(107)  评论(0编辑  收藏  举报