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


猜你喜欢
- 这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 如下所示:#!/usr/bin/python3# -*- coding:UTF-8-*-# Author: zhuhongqiangfrom
- 我在使用python读取几十万行的文件中的数据,并构造字典,列表等数据结构时,再访问字典,列表时,一般都会出现内存不够的问题,然后只能循环读
- 爬取一些网站下指定的内容,一般来说可以用xpath来直接从网页上来获取,但是当我们获取的内容不唯一的时候我们无法选择,我们所需要的、所指定的
- 背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便
- 图像显示和打印面临的一个问题是:图像的亮度和对比度能否充分突出关键部分。这里所指的“关键部分”在 CT 里的例子有软组织、骨头、脑组织、肺、
- 那你也许会问及,怎样获取当前系统日期的最大时间值,如yyyy-MM-dd 23:59:59.997。 我们可以使用DATEADD函数,来实现
- 今天看新概念视频的时候播放器PotPlayer的播放列表总是不能正确排序,我看到这些视频的名字格式如下:Lesson 1-2 单词解读.mp
- 遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢如下sql,找出重复的记录,和重复记
- 因此计划先把数据转插入一个临时表,再对临时表的数据进行分析。 问题点是如何动态创建临时表。原先Insus.NET使用下面代码实现: 代码如下
- 本文实例讲述了python在Windows8下获取本机ip地址的方法。分享给大家供大家参考。具体实现方法如下:import socket h
- 一、前言听说python很流行,因为有很多模块资源,而且导入模块,操作和理解起来很简单。所以在这里记录一下学习python的过程,我相信最重
- 最近在做一个金额查询,验证的时候总是出现很多问题,如输入-号后,input框里是没有了,但是在model里还是绑定了,提交的时候就会报错,真
- 一、合并多个numpy矩阵 1、首先创建两个多维矩阵 矩阵a的大小为(2,3,2)矩阵b的大小为(3,2,3)采用concatentate这
- Golang多线程刷票的实现代码直接用Go语言来写下刷票。package mainimport ("fmt" "
- 为了方便各位朋友,本文收集了一些对Web开发人员非常有用的手册,记得推荐一下哦。HTML 速查手册HTML/XTML in one page
- 1.奇偶校验我们约定一串编码里1的个数是偶数个,那么这串编码里携带的信息就是对的,否则就是错的。我们可以在开头对这串编码加一位校验码实现奇偶
- 通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件。今天我简单的
- 1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Wh
- QSlider 是一个具有可来回拉动手柄的控件。有时使用滑块比输入数字或使用旋转框更方便。在我们的例子中,我们将创建一个滑块和一个标签。标签