Python初级项目之掷骰子的Plotly实现

作者 | HIT-梦醒忘川

参考 |《Python编程从入门到实践》


文章目录

  • 前言
  • 一、Plotly安装
  • 二、掷一个骰子
  • 三、同时掷两个骰子
  • 四、同时掷两个面数不同的骰子
  • 总结

前言

      在数学领域,掷骰子常被用来解释各种数据分析类型,而他在赌场和其他博弈场景中也有实际应用,在游戏《大富翁》以及众多角色扮演游戏中亦是如此。 下面让我们来探索这一平常又充满魅力的现象。


一、Plotly安装

1、Plotly模块安装:在cmd命令终端下输入命令:

pip install plotly

2、众所周知,cmd下载速度慢,这是由于经由外网网速极差,经常是几KB一秒,甚至有可能因为网速问题下载失败报红。所以为了加快下载速度,我们可以采用镜像服务器。这里推荐使用国内镜像即可快速安装成功:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple plotly

3、最后可以在cmd终端查询已经安装的python库:

pip list

二、模拟掷一个骰子的情况

1.创建Died类

       创建实例时,如果没有指定任何实参,面数默认为6;如果指定了实参,这个值将用于设置骰子的面数,骰子是按照面数命名的。

from random import randint

class Die:

    def __init__(self, num_sides=6):
        self.num_sides = num_sides

    def roll(self):
        return randint(1, self.num_sides)

2.分析掷结果,绘制直方图

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

die = Die()

results = []
for roll_num in range(1000):
    result = die.roll()
    results.append(result)

frequencies = []
for value in range(1, die.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)

x_values = list(range(1,die.num_sides+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result'}
y_axis_config = {'title': 'Frequency of results'}
my_layout = Layout(title='Throw a D6 1000 times',
        xaxis = x_axis_config, yaxis = y_axis_config)

offline.plot({'data':data, 'layout': my_layout}, filename='d6.html')

(1)为分析结果,我们创建新列表 frequencies ,用于存储每种点数出现的次数。

(2)为创建直方图,需要为每个可能出现的点数生成一个条形。我们将可能出现的点数存储在一个名为x_values 的列表中,并且 Plotly 不能够直接接受函数 range ()的结果,因此需要使用函数 list ()将其转换为列表。

(3)类 Bar ()表示绘制条形图的数据集,需要一个存储 x 值的列表和一个存储 y 值的列表。

(4)类 Layout ()返回一个指定图表布局和配置的对象。这里设置了图表的名称,并传人了 x 轴和 y 轴的配置字典。

(5)为生成图表,我们调用了函数 offline . plot () 这个函数需要一个包含数据和布局对象的字典,还接受一个文件名,指定要将图表保存到哪里。这里将输出存储到文件 d6.html 

(6)运行程序时,会打开浏览器并显示文件 d6.html

三、模拟掷两个骰子的情况

      每次掷两个骰子时,将两个骰子的点数相加,结果存储在 result 当中。 可能出现的最大点数为两个骰子的最大可能点数之和,此值存储在 max_result 中。

      创建两个 Die 实例,计算每次的总点数。

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

die_1 = Die()
die_2 = Die()
results = []
for roll_num in range(1000):
    result = die_1.roll()+die_2.roll()
    results.append(result)

frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(1, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)

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

x_axis_config = {'title': 'Result', 'dtick':1}
y_axis_config = {'title': 'Frequency of results'}
my_layout = Layout(title='Throw two D6 1000 times',
        xaxis = x_axis_config, yaxis = y_axis_config)
offline.plot({'data':data, 'layout': my_layout}, filename='d6_d6.html')

 

四、同时掷两个面数不同的骰子

下面创建一个6面的骰子和一个10面的骰子,观察同时投掷 50 000 次的结果如何:

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

die_1 = Die()
die_2 = Die(10)
results = []
for roll_num in range(50_000):
    result = die_1.roll()+die_2.roll()
    results.append(result)

frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(1, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)

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

x_axis_config = {'title': 'Result', 'dtick':1}
y_axis_config = {'title': 'Frequency of results'}
my_layout = Layout(title='Throw a D6 and a D10 50_000 times',
        xaxis = x_axis_config, yaxis = y_axis_config)
offline.plot({'data':data, 'layout': my_layout}, filename='d6_d10.html')


总结

      通过使用 Plotly 模拟掷骰子的结果,我们能够非常自由地探索这种现象,并实现数据可视化。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值