Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)

 更新时间:2020年04月08日 15:41:20   作者:zjz-ouni  
这篇文章主要介绍了Pycharm中安装Pygal并使用Pygal模拟掷骰子,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

使用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)

总结

到此这篇关于Pycharm中安装Pygal并使用Pygal模拟掷骰子的文章就介绍到这了,更多相关Pycharm安装Pygal模拟掷骰子内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用jmespath模块进行json数据处理

    Python利用jmespath模块进行json数据处理

    jmespath是python的第三方模块,是需要额外安装的。它在python原有的json数据处理上做出了很大的贡献。本文将详细介绍如何利用jmespath实现json数据处理,需要的可以参考一下
    2022-03-03
  • 详解Python模块化--模块(Modules)和包(Packages)

    详解Python模块化--模块(Modules)和包(Packages)

    这篇文章主要介绍了使用Python的模块(Modules)和包(Packages),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Python字典数据对象拆分的简单实现方法

    Python字典数据对象拆分的简单实现方法

    这篇文章主要介绍了Python字典数据对象拆分的简单实现方法,涉及Python针对字典数据的相关遍历、拆分等操作技巧,需要的朋友可以参考下
    2017-12-12
  • 浅谈Python线程的同步互斥与死锁

    浅谈Python线程的同步互斥与死锁

    这篇文章主要介绍了浅谈Python线程的同步互斥与死锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 利用Python自制一个批量图片水印添加器

    利用Python自制一个批量图片水印添加器

    这篇文章主要为大家详细介绍了如何利用Python语言自制一个批量图片水印添加器,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2022-10-10
  • python 读写excel文件操作示例【附源码下载】

    python 读写excel文件操作示例【附源码下载】

    这篇文章主要介绍了python 读写excel文件操作,结合实例形式分析了Python基于xlutils导入xlrd,xlwt库操作Excel相关实现技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2019-06-06
  • pycharm 使用心得(二)设置字体大小

    pycharm 使用心得(二)设置字体大小

    pycharm 是很好的一个IDE,在windows下,和macOS下,都能很好的运行。唯一缺点是启动慢。默认字体太小,在mac下,需要瞪大24K氪金狗眼才能看清。 为了保护好眼睛,我们需要把字体调整大一些:
    2014-06-06
  • python进阶TensorFlow神经网络拟合线性及非线性函数

    python进阶TensorFlow神经网络拟合线性及非线性函数

    这篇文章是python进阶学习主要介绍了TensorFlow神经网络拟合线性及非线性函数原理及示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • python爬虫获取百度首页内容教学

    python爬虫获取百度首页内容教学

    在本篇内容里小编给大家分享了关于python爬虫获取百度首页内容教学,需要的朋友们可以跟着学习下。
    2018-12-12
  • wxpython多线程防假死与线程间传递消息实例详解

    wxpython多线程防假死与线程间传递消息实例详解

    今天小编就为大家分享一篇wxpython多线程防假死与线程间传递消息实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论