使用Pygal模拟掷骰子

在本节中,将使用Python可视化包Pygal来生成可缩放的矢量图形文件。

对于需要在尺寸不同的屏幕上显示的图表,这很有用,因为它们将自动缩放,以适合观看者的屏幕。

1.创建Die类

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.分析1000次结果

from die import Die

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)

print(frequencies)

3.绘制直方图

import pygal
from die import Die

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=‘Result of rolling one D6 1000 times‘
hist.x_labels=[‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘]
hist.x_title="Result"
hist.y_title="Frequency of Result"

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

我们将图表渲染为一个SVG文件,使用web浏览器来查看生成的直方图:

4.同时掷两个面数不同的骰子50000次

import pygal
from die import Die

die_1=Die()
die_2=Die(10)

results=[]
for roll_num in range(50000):
    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(2,max_result+1):
    frequency=results.count(value)
    frequencies.append(frequency)

hist=pygal.Bar()
hist.title=‘Result of rolling a D6 and a D10 50000 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‘)

原文地址:https://www.cnblogs.com/exciting/p/9011619.html

时间: 2024-10-30 10:34:45

使用Pygal模拟掷骰子的相关文章

【算法】模拟掷骰子

模拟掷骰子.以下代码能够计算每种两个骰子之和的准确概率分布: int SIDES = 6; double[] dist = new double[2*SIDES+1]; for (int i = 1; i <= SIDES; i++) for (int j = 1; i <= SIDES; j++) dist[i+j] += 1.0; for (int k = 2; k <= 2*SIDES; k++) dist[k] /= 36.0; dist[i] 的值就是两个骰子之和为i的概率.用

python之pygal:掷两个不同的骰子并统计大小出现次数

代码示例: 1 # 掷两个不同的骰子并统计大小出现次数 2 import pygal 3 from die_class import Die 4 5 die = Die(6) # 实例化一个六面的骰子对象 6 die_10 = Die(10) # 实例化一个十面的骰子对象 7 8 results = [] 9 # 掷骰子1000次 10 for n in range(1000): 11 res = die.roll() + die_10.roll() 12 results.append(res)

模拟算法_掷骰子游戏&amp;&amp;猜数游戏

模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,C语言中是用srand()和rand()函数来生成随机数. 先来介绍一下随机数的生成: 1.产生不定范围的随机数 函数原型:int rand() 产生一个介于0~RAD_MAX间的整数,其具体值与系统有关系.Linux下为2147483647.我们可以在include文件夹中的stdlib.h中可以看到(Linux在usr目录下,Windows在安装目录下) 1 #include<stdio.h> 2 #include<stdlib

python之pygal:掷一个骰子统计次数并以直方图形式显示

源码如下: 1 # pygal包:生成可缩放的矢量图形文件,可自适应不同尺寸的屏幕显示 2 # 安装:python -m pip intall pygal-2.4.0-py2.py3-none-any.whl 3 # 功能:掷一个骰子统计次数并以直方图形式显示 4 import pygal 5 from die_class import Die 6 7 die = Die() # 实例化一个骰子对象 8 9 results = [] 10 # 掷骰子100次 11 for n in range(

LeetCode 1223. 掷骰子模拟 Dice Roll Simulation - Java - DP

题目链接:1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始编号). 现在,给你一个整数数组 rollMax 和一个整数 n,请你来计算掷 n 次骰子可得到的不同点数序列的数量. 假如两个序列中至少存在一个元素不同,就认为这两个序列是不同的.由于答案可能很大,所以请返回 模 \(10^9 + 7\) 之后的结果. 示例1: 输入:n =

掷骰子问题之C语言随机数

之前有看到有人在写“掷骰子100次,打印出掷骰子”的代码 便找空写了一下代码,不是很好,仅供大家讨论 因为掷骰子的结果是在1~6之间随机产生的,因此代码也必须要模拟随机的情况 但是电脑是无法真正的产生随机数,只能以函数近似生成的方式得到,因此我的代码也是基于这种方式写出的 得到随机数的方式有两步,第一步是设置产生随机数的种子,第二步才是根据种子得到随机数 这两步分别对应了两个函数:srand()和rand() 并且由于是函数生成,函数的特性决定了如果种子一样,会得到相同的结果,也就不存在随机的情

Algs4-1.1.35模拟投骰子

1.1.35模拟投骰子.以下代码能够计算每两个骰子之和的准确概率分布:public class Test{    public static void main(String[] args)    {        int SIDES=6;        double[] dist=new double[2*SIDES+1];        for (int i=1;i<=SIDES;i++)            for (int j=1;j<=SIDES;j++)             

华为历年试题(掷骰子游戏 7)

问题描述: 在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 1)  9:无障碍 2)  1:停掷一轮,即下轮所掷数字无效: 3)  2:后退两步,如果已经到起点不再后退: 4)  3:奖励前进一步 如果在游戏过程中,已经走到地图终点,则游戏结束.根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步. 要求实现函数: void dice(int map_len, int* map, int* dice_val, in

第21本:《上帝掷骰子吗?》

第21本:<上帝掷骰子吗?> 这是一本关于量子论的科普读物,不过作者曹天元把一系列人物和实验用一种小说的形式讲 述了下来,很感叹作者深厚的理论知识和文字功底.这本书在豆瓣上评分在9.3-9.4,我的GTD阅读清单是按照评分顺序来整理的,超过9分的读物如果不 优先阅读真有点对不起书名里的上帝. 这类书既然是科普知识类的书,就很难找到可以执行的行动,这些知识体系能让你的视野开阔,当思考一个问题时不能被其表面现象所迷惑,任何一个定律都 不是绝对适用的.在读到能量不是连续的,而是一份一份的,再想到计算