使用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日
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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最大的设计失误
· 单元测试从入门到精通