栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 模拟掷骰子的结果,我们能够非常自由地探索这种现象,并实现数据可视化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号