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>


<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>

2021年5月24日

posted @   qsad阿斯顿  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示
哥伦布
01:03发布
哥伦布
01:03发布
9°
西南风
2级
空气质量
相对湿度
46%
今天
2°/14°
周二
4°/16°
周三
6°/19°