使用pygal模拟掷骰子

1、pygal_die.py

from random import randint
#创建一个类,随机摇动骰子
class Die():
    def __init__(self,num_sides=6):
        self.num_sides = num_sides
    #创建一个方法,使用randint函数返回随机数
    def roll(self):
        return randint(1,self.num_sides)

2、pygal_die_visual.py
分析掷一个D6骰子的结果

from pygal_die import Die
import pygal
#创建一个实例
die = Die()
#利用for循环,执行一千次掷骰子,并将其存入一个列表中
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]
hist.x_title = "Results"
hist.y_title = "Frequency of Result"
hist.add('D6',frequencies)
"""
add()方法是将一系列的值添加到图标中(传递两个实参,一个给添加值指定的标签,还有一个列表,其中包含将出现的值)
"""
hist.render_to_file('die_visual.svg')
"""最后将其存储在一个文件中,这种文件的扩展名必须得为.svg,可使用web浏览器打开查看。将鼠标放到任何图形,可看到
与之对应的数据。

3、pygal_difference_visual.py
同时掷一个D6和一个D10面骰子,分析掷50000次出现的结果

from pygal_die import Die
import pygal
#创建一个D6实例,一个D10实例
die_1 = Die()
die_2 = Die(10)
#将两者之和存入列表中
results = []
for num_roll in range(50000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
"""将两面的最大点数相加,模拟实例,而不是使用range(2,17)"""
for value in range(2,max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
hist = pygal.Bar()
hist.title = "Result of rolling two D6 dice 1000 times"
hist.x_labels = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add("D6+D10",frequencies)
hist.render_to_file('dice_visual.svg')

你可能感兴趣的:(使用pygal模拟掷骰子)