python-使用Pygal模拟掷骰子

Pygal模拟掷骰子

简介

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

步骤

1.创建一个Dice类
我们先创建一个dice.py文件,文件内容包含Dice类,下面的类模拟掷一个骰子:

 from random import randint

class Dice():
    """表示一个骰子的类"""

    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.分析结果并绘制直方图
创建一个dice_visual.py文件,分析一个D6骰子的结果,并计算每个点数出现的次数,然后再绘制一个表示结果的直方图:

from dice import Dice
import pygal

"""掷一个6面骰子"""

#创建一个D6
dice=Dice()

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

#分析结果
#创建空列表frequencies,用于存储每种点数出现的次数
frequencies=[]
#遍历可能的点数(这里为1-6for value in range(1,dice.num_sides+1):
    #计算每种点数在results中出现了多少次
    frequency=results.count(value)
    #将这个值附加到列表frequencies的末尾
    frequencies.append(frequency)

#对结果进行可视化
#为创建条形图,我们创建了一个pygal.Bal()实例,并将其存储在hist中
hist=pygal.Bar()

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('dice_visual.svg')

print(frequencies)

3.运行并查看结果

1.运行dice_visual.py(生成的图形文件dice_visual.svg位于dice_visual.py所在的文件夹中)
2.查看生成的直方图,最简单的方式是使用Web浏览器(我使用的Google Chrome浏览器)。注:Pygal让这个图具有交互性:如果你将鼠标指向该图表中的任何条形,将看到与之相关联的数据。
python-使用Pygal模拟掷骰子_第1张图片

你可能感兴趣的:(Python,python)