python模拟掷骰子

1、使用Pygal模拟掷骰子
1.1 安装Pygal
python -m pip install --user pygal
1.2 创建Die类

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)

1.3 掷骰子

from die import Die

#创建一个D6
die=Die()

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

print(results)

输出:

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

1.4 分析结果

from die import Die

#创建一个D6
die=Die()

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

print(results)

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

print(frequencies)

输出:

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

1.5 绘制直方图
直方图是一种条形图,指出了各种结果出现的频率。

import pygal
from die import Die

#创建一个D6
die=Die()

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

print(results)

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

print(frequencies)

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

hist.title="Results of rolling one D6 1000 times."  #用于标示直方图的字符串
hist.x_lables=['1','2','3','4','5','6'] #将掷骰子的结果用作x轴的标签
hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D6',frequencies)  #用add()函数将一系列的值添加到图表中
hist.render_to_file('die_visual.svg')   #将图表渲染为一个SVG文件

输出:


python模拟掷骰子_第1张图片
image.png

查看生成的直方图,最简单的方式是使用Web浏览器。
pygal让这个图表具有交互性:如果将鼠标指向该图表中的任何条形,将看到与之相关联的数据。
1.6 同时掷两个骰子

import pygal
from die import Die

#创建两个D6骰子
die_1=Die()
die_2=Die()

#掷骰子多次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
    result=die_1.roll()+die_2.roll()    #计算总点数
    results.append(result)

print(results)

#分析结果
frequencies=[]
max_result=die_1.num_sides+die_2.num_sides  #最大可能点数
for value in range(2,max_result+1):
    frequency=results.count(value)
    frequencies.append(frequency)

print(frequencies)

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

hist.title="Results of rolling one D6 1000 times."  #用于标示直方图的字符串
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']  #将掷骰子的结果用作x轴的标签
hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D6+D6',frequencies)   #用add()函数将一系列的值添加到图表中
hist.render_to_file('dice_visual.svg')  #将图表渲染为一个SVG文件

输出:


python模拟掷骰子_第2张图片
image.png

图表显示总点数为7的可能性最大,总点数为2或12的可能性最小
1.7 同时掷两个面数不同的骰子

import pygal
from die import Die

#创建一个D6和一个D10的骰子
die_1=Die()
die_2=Die(10)   #实参为10,表示有10面

#掷骰子多次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(50000):
    result=die_1.roll()+die_2.roll()    #计算总点数
    results.append(result)

print(results)

#分析结果
frequencies=[]
max_result=die_1.num_sides+die_2.num_sides  #最大可能点数
for value in range(2,max_result+1):
    frequency=results.count(value)
    frequencies.append(frequency)

print(frequencies)

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

hist.title="Results of rolling a D6 and a D10 50,000 times."    #用于标示直方图的字符串
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12','13','14','15','16']  #将掷骰子的结果用作x轴的标签
hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D6+D10',frequencies)  #用add()函数将一系列的值添加到图表中
hist.render_to_file('different_visual.svg') #将图表渲染为一个SVG文件

输出:


python模拟掷骰子_第3张图片
image.png

图表显示:可能性最大的点数有5种,即7,8,9,10,11.

总结:使用matplotlib创建简单的图表;使用散点图来探索随机漫步过程;使用Pygal创建直方图;生成数据集及对其进行可视化。

你可能感兴趣的:(python模拟掷骰子)