Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
作者:zjz-ouni 发布时间:2023-01-20 02:42:35
使用Python可视化Pygal包来生成可缩放的矢量图形文件!
对于在尺寸不同的屏幕上显示图标,它们将自动缩放以适合观看者的屏幕,如果以在线的方式使用图标,建议使用Pygal来生成,这样在任何设备上显示都会很美观!!!
1、安装Pygal
安装Pygal有好几种办法这边简略带过!!!
介绍一种在pycharm中直接安装的方法!
1、在File文件中打开Settings
2、找到Project:untitled打开Projiect lnterpreter右上方的+号
3、输入我们要安装的Pygal包,选中Specify version,点击左下方Install Package,出现绿色显示安装完成
4、查询下是否安装完成,在pycharm下方找到Terminal,并输入pip list,这时候我们查看到Pygal安装完成2.4.0版本。
2、Pypal画廊
了解使用Pygal可创建什么样的图标,可访问官网http://www.pygal.org/单击Documentation,再单击Chart types
3、创建Die类
下面的类模拟掷一个骰子:
创建die.py文件
from random import randint
class Die():
"""表示一个骰子的类"""
def __init__(self, num_sides=6): #_init_()接受一个可选参数,如果没有指定任何实参,面数默认为6
"""骰子默认为六面"""
self.num_sides = num_sides
def roll(self): #方法roll()使用randint()来返回
"""返回一个位于1和骰子面熟之间的随机值"""
return randint(1,self.num_sides)
4、掷骰子
使用Die类来掷骰子,将结果打印
新建一个die_visual.py文件
from matp.touzi.die import Die
#创建一个Die实例
die=Die()
#掷几次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(100):
result=die.roll()
results.append(result)
print(results)
通过对列表的打印,我们可以的下列结果集:
在效果图中我们可以看出,并未出现0和7的值所有结果有效
5、分析结果
在上述代码中,我们得到了骰子所有可能的列表,现在我们需要分析每个点出现的次数:
在die_visual.py文件添加修改:
from matp.touzi.die import Die
#创建一个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)
#print(results)
这边我们将掷骰子的次数增加到1000,同时创建了空列表frequencies,用来存储每个点出现的次数,再把值附加到frequencies末尾,我们将其效果打印,如下图所示:
6、绘制直方图
有了每个点数的次数列表之后,我们就可以绘制一个表示结果的直方图
在die_visual.py文件添加:
#对结果进行可视化
hist=pygal.Bar() #创建一个实例,并将其储存在hist中
hist.title="Result of rolling one D6 1000 times." #hist标题
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文件
找到文件的地址,用浏览器打开die_visual.svg文件效果图如下所示:
7、同时掷两个骰子
前6点都是掷1个骰子,现在我们试着尝试同时掷两个骰子
我们只需对上面的die_visual.py文件进行修改即可,这边我们把die_visual.py文件复制一遍取一个新的文件名dice_visual.py,在dice_visual.py文件中进行修改。
from matp.touzi.die import Die
import pygal
#创建两个D6骰子
die_1=Die()
die_2=Die()
#掷几次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
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(1,max_result+1):
frequency=results.count(value)
frequencies.append(frequency)
#对结果进行可视化
hist=pygal.Bar() #创建一个实例,并将其储存在hist中
hist.title="Result of rolling two D6 1000 times." #hist标题
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']
hist.x_title="Result"
hist.y_title="Frequency of Result"
hist.add('D6+D6',frequencies) #将一系列值添加到图标中
hist.render_to_file('dice_visual.svg') #将图标渲染为一个svg文件
#print(frequencies)
#print(results)
max_result=die_1.num_sides+die_2.num_sides
两个点数相加最大之和12,存储在max_result当中
效果图如下:
8、同时掷两个面数不同的骰子
上述第7点中掷的是两个相同的D6骰子,现实我们尝试着操作两个不同面得的骰子,掷这两个骰子50000次的结果如何。
新建different_dice.py文件
**from matp.touzi.die import Die
import pygal
#创建一个D6骰子和D10骰子
die_1=Die()
die_2=Die(10)#传递了第二个骰子实参为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(1,max_result+1):
frequency=results.count(value)
frequencies.append(frequency)
#对结果进行可视化
hist=pygal.Bar() #创建一个实例,并将其储存在hist中
hist.title="Result of rolling a D6 and a D10 50000 times." #hist标题
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('different_dice.svg') #将图标渲染为一个svg文件
#print(frequencies)
#print(results)**
效果图如下:
综上模拟掷骰子完毕!!!
附上完整的die.py和die_visual.py和dice_visual.py和different_dice.py文件
die.py
from random import randint
class Die():
"""表示一个骰子的类"""
def __init__(self, num_sides=6): #_init_()接受一个可选参数,如果没有指定任何实参,面数默认为6
"""骰子默认为六面"""
self.num_sides = num_sides
def roll(self): #方法roll()使用randint()来返回
"""返回一个位于1和骰子面熟之间的随机值"""
return randint(1,self.num_sides)
die_visual.py
from matp.touzi.die import Die
import pygal
#创建一个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中
hist.title="Result of rolling one D6 1000 times." #hist标题
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文件
#print(frequencies)
#print(results)
dice_visual.py
from matp.touzi.die import Die
import pygal
#创建两个D6骰子
die_1=Die()
die_2=Die()
#掷几次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
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(1,max_result+1):
frequency=results.count(value)
frequencies.append(frequency)
#对结果进行可视化
hist=pygal.Bar() #创建一个实例,并将其储存在hist中
hist.title="Result of rolling two D6 1000 times." #hist标题
hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']
hist.x_title="Result"
hist.y_title="Frequency of Result"
hist.add('D6+D6',frequencies) #将一系列值添加到图标中
hist.render_to_file('dice_visual.svg') #将图标渲染为一个svg文件
#print(frequencies)
#print(results)
different_dice.py
from matp.touzi.die import Die
import pygal
#创建一个D6骰子和D10骰子
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(1,max_result+1):
frequency=results.count(value)
frequencies.append(frequency)
#对结果进行可视化
hist=pygal.Bar() #创建一个实例,并将其储存在hist中
hist.title="Result of rolling a D6 and a D10 50000 times." #hist标题
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('different_dice.svg') #将图标渲染为一个svg文件
#print(frequencies)
#print(results)
来源:https://blog.csdn.net/zjzounir/article/details/105373725
猜你喜欢
- 就目前互联网上大小网站而言,大部分都是采用ASP+ACCESS/SQL Server或者PHP+MySQL来编写;事实上,ASP和MySQL
- 最近看ECShop到网上找资料,发现好多说明ECShop的文件结构不全面,于是想自己弄个出来。但这是个无聊耗时的工作,自己就写了个Pytho
- 在日常运维中,如果涉及到用户管理,就一定会用到给用户设置密码的工作,其实吧,平时脑子里觉得设置个密码没什么,但要真让你随手敲一个12位带特殊
- 前言在《Python中if语句的使用方法》中提到,对于一种可能性、两种可能性或者多种可能性的情况,可以通过if语句来实现。而用if语句实现多
- python PIL 将数组值转成图片安装 PIL 包pip install pillow将二维数据转换成单通道图片from PIL imp
- 在用Matplotlib库绘制折线图的时候遇到一个问题,当定义一个x轴数组时,plot绘制折线图时,x轴并不会按照我们定义的数组的顺序去排列
- 安装conda activate ps pip install visdom激活ps的环境,在指定的ps环境中安装visdom开启pytho
- 本文实例讲述了python去除所有html标签的方法。分享给大家供大家参考。具体分析如下:这段代码可以用于去除文本里的字符串标签,不包括标签
- 朋友的网站要计算机票的折扣价格,并且在最后的折扣价格上应对个位进行四舍五入,同时在ASP和Javasc
- 什么是python的迭代如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Ite
- 一、前情提要最近在写一个项目,需要用到子线程,但是我们小学二年级就学过操作系统, 线程的执行是由系统的CPU调度算法所决定的,调度算法按照一
- 1, 创建pytorch 的Tensor张量:torch.rand((3,224,224)) #创建随机值的三维张量,大小为(3,224,2
- 1.方法方法描述bbox(item, column=None)返回指定item的框选范围,或者单元格的框选范围column( cid, op
- 前言图像分割在医学成像、自动驾驶汽车和卫星成像等方面有很多应用,本质其实就是图像像素分类任务,也就是使用深度学习模型为输入图像的每个像素分配
- 1. 使用 fileinput 进行迭代fileinput 模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的 input()
- 继打游戏、看视频等摸鱼行为被监控后,现在打工人离职的倾向也会被监控。有网友爆料称知乎正在低调裁员,视频相关部门几乎要裁掉一半。而在知乎裁员的
- 在文章《用CSS实现柱状图(Bar Graph)的方法总结与比较(三)》中我强调说不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们
- 目的:是学习python 多线程的工作原理,及通过抓取400张图片这种IO密集型应用来查看多线程效率对比import requestsimp
- python爬虫写起来非常快,虽然也可以用java,但是没有python来的简
- pandas处理大数据的限制现在的数据科学比赛提供的数据量越来越大,动不动几十个G,甚至上百G,这就要考验机器性能和数据处理能力。Pytho