Pygal简单使用——模拟掷骰子

目录

1、创建Die类

2、掷骰子

3、分析结果

4、绘制直方图


在这个项目中,我们将对掷骰子的结果进行分析。掷6面的常规骰子时,可能出现的结果为1~6点,且出现每种结果的可能性相同。 然而,如果同时掷两个骰子,某些点数出现的可能性将比其他点数大。为确定哪些点数出现的可能性最大,我们将生成一个表示掷骰子结果的数据集,并根据结果绘制出一个图形。

下边分步骤来实现模拟掷骰子的项目


1、创建Die类

下边的类模拟投掷一个骰子(die.py):

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from random import randint
    class Die():
        """表示一个骰子的类"""
        def __init__(self, num_sides=6):
            """骰子默认为6面"""
            self.num_sides = num_sides

        def roll(self):
            """"返回一个位于1和骰子面数之间的随机值"""
            return randint(1, self.num_sides)

方法__init__() 接受一个可选参数。创建这个类的实例时,如果没有指定任何实参,面数默认为6;如果指定了实参,这个值将用于设置骰子的面数。骰子是根据面数命名的,6面的骰子名为D6,8面的骰子名为D8,以此类推。

方法roll() 使用函数randint()来返回一个1和面数之间的随机数。这个函数可能返回起始值1、终止值num_sides或这两个值之间的任何整数。


2、掷骰子

掷D6骰子,将结果打印出来,并检查结果是否合理(die_visual.py):

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from die import Die

# 创建一个D6
die = Die()

# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(100):
    result = die.roll()
    results.append(result)
    print(results)

运行结果的一个示例:

[3, 5, 2, 1, 3, 3, 1, 5, 2, 6, 6, 4, 3, 5, 2, 4, 6, 6, 2, 5, 4, 3, 3, 1, 4, 3, 4, 1, 6, 3,
 2, 4, 5, 1, 1, 4, 2, 5, 1, 1, 5, 5, 3, 2, 4, 6, 4, 6, 1, 5, 5, 2, 5, 3, 5, 2, 5, 5, 3, 4, 
 2, 4, 4, 2, 3, 4, 2, 6, 1, 3, 3, 1, 3, 6, 3, 6, 3, 2, 6, 6, 2, 2, 2, 1, 1, 5, 1, 5, 3, 6, 
 5, 6, 1, 1, 5, 3, 4, 6, 6, 2]

3、分析结果

为分析掷一个D6骰子的结果,我们计算每个点数出现的次数。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from die import Die
# 创建一个D6
die = Die()
# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(100):
    result = die.roll()
    results.append(result)

# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
print(frequencies)

运行结果(表示1~6分别出现的次数):


4、绘制直方图

有了频率列表后,我们就可以绘制一个表示结果的直方图。直方图 是一种条形图,指出了各种结果出现的频率。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from die import Die
import pygal

# 创建一个D6
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)

# 对结果进行可视化
hist = pygal.Bar()

# 设置直方图的属性
hist.title = "Results of rolling one D6 1000 times."  #设置直方图标题
hist.x_labels = ['1', '2', '3', '4', '5', '6']  # 设置x轴坐标值
hist.x_title = "Result"
hist.y_title = "Frequency of Result"  # 设置x,y坐标轴标题

hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

代码解析:

  • 为创建条形图, 创建了一个pygal.Bar() 实例,并将其存储在hist中
  • 设置hist 的属性title(用于标示直方图的字符串),hist.title = "Results of rolling one D6 1000 times."
  • 将掷D6骰子的可能结果用作x轴的标签,hist.x_labels = ['1', '2', '3', '4', '5', '6']
  • 给每个轴都添加了标题,hist.x_title = "Result",hist.y_title = "Frequency of Result"
  • 我们使用add() 将一系列值添加到图表中(向它传递要给添加的值指定的标签, 还有一个列表, 其中包含将出现在图表中的值),hist.add('D6', frequencies)
  • 将这个图表渲染为一个SVG文件, 这种文件的扩展名必须为.svg。hist.render_to_file('die_visual.svg')
  • 要查看生成的直方图,最简单的方式是使用Web浏览器,打开文件die_visual.svg(它位于die_visual.py所在的文件夹中) 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值