Pycharm中安裝Pygal并使用Pygal模擬擲骰子(推薦)
使用Python可視化Pygal包來(lái)生成可縮放的矢量圖形文件!
對(duì)于在尺寸不同的屏幕上顯示圖標(biāo),它們將自動(dòng)縮放以適合觀(guān)看者的屏幕,如果以在線(xiàn)的方式使用圖標(biāo),建議使用Pygal來(lái)生成,這樣在任何設(shè)備上顯示都會(huì)很美觀(guān)!??!
1、安裝Pygal
安裝Pygal有好幾種辦法這邊簡(jiǎn)略帶過(guò)!??!
介紹一種在pycharm中直接安裝的方法!
1、在File文件中打開(kāi)Settings

2、找到Project:untitled打開(kāi)Projiect lnterpreter右上方的+號(hào)

3、輸入我們要安裝的Pygal包,選中Specify version,點(diǎn)擊左下方Install Package,出現(xiàn)綠色顯示安裝完成

4、查詢(xún)下是否安裝完成,在pycharm下方找到Terminal,并輸入pip list,這時(shí)候我們查看到Pygal安裝完成2.4.0版本。

2、Pypal畫(huà)廊
了解使用Pygal可創(chuàng)建什么樣的圖標(biāo),可訪(fǎng)問(wèn)官網(wǎng)http://www.pygal.org/單擊Documentation,再單擊Chart types
3、創(chuàng)建Die類(lèi)
下面的類(lèi)模擬擲一個(gè)骰子:
創(chuàng)建die.py文件
from random import randint class Die(): """表示一個(gè)骰子的類(lèi)""" def __init__(self, num_sides=6): #_init_()接受一個(gè)可選參數(shù),如果沒(méi)有指定任何實(shí)參,面數(shù)默認(rèn)為6 """骰子默認(rèn)為六面""" self.num_sides = num_sides def roll(self): #方法roll()使用randint()來(lái)返回 """返回一個(gè)位于1和骰子面熟之間的隨機(jī)值""" return randint(1,self.num_sides)
4、擲骰子
使用Die類(lèi)來(lái)擲骰子,將結(jié)果打印
新建一個(gè)die_visual.py文件
from matp.touzi.die import Die #創(chuàng)建一個(gè)Die實(shí)例 die=Die() #擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中 results=[] for roll_num in range(100): result=die.roll() results.append(result) print(results)
通過(guò)對(duì)列表的打印,我們可以的下列結(jié)果集:

在效果圖中我們可以看出,并未出現(xiàn)0和7的值所有結(jié)果有效
5、分析結(jié)果
在上述代碼中,我們得到了骰子所有可能的列表,現(xiàn)在我們需要分析每個(gè)點(diǎn)出現(xiàn)的次數(shù):
在die_visual.py文件添加修改:
from matp.touzi.die import Die #創(chuàng)建一個(gè)Die實(shí)例 die=Die() #擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中 results=[] for roll_num in range(1000): result=die.roll() results.append(result) #分析結(jié)果 frequencies=[] for value in range(1,die.num_sides+1): frequency=results.count(value) frequencies.append(frequency) print(frequencies) #print(results)
這邊我們將擲骰子的次數(shù)增加到1000,同時(shí)創(chuàng)建了空列表frequencies,用來(lái)存儲(chǔ)每個(gè)點(diǎn)出現(xiàn)的次數(shù),再把值附加到frequencies末尾,我們將其效果打印,如下圖所示:

6、繪制直方圖
有了每個(gè)點(diǎn)數(shù)的次數(shù)列表之后,我們就可以繪制一個(gè)表示結(jié)果的直方圖
在die_visual.py文件添加:
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling one D6 1000 times." #hist標(biāo)題
hist.x_labels=['1','2','3','4','5','6']
hist.x_title="Result"
hist.y_title="Frequency of Result"
hist.add('D6',frequencies) #將一系列值添加到圖標(biāo)中
hist.render_to_file('die_visual.svg') #將圖標(biāo)渲染為一個(gè)svg文件
找到文件的地址,用瀏覽器打開(kāi)die_visual.svg文件效果圖如下所示:

7、同時(shí)擲兩個(gè)骰子
前6點(diǎn)都是擲1個(gè)骰子,現(xiàn)在我們?cè)囍鴩L試同時(shí)擲兩個(gè)骰子
我們只需對(duì)上面的die_visual.py文件進(jìn)行修改即可,這邊我們把die_visual.py文件復(fù)制一遍取一個(gè)新的文件名dice_visual.py,在dice_visual.py文件中進(jìn)行修改。
from matp.touzi.die import Die
import pygal
#創(chuàng)建兩個(gè)D6骰子
die_1=Die()
die_2=Die()
#擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中
results=[]
for roll_num in range(1000):
result=die_1.roll()+die_2.roll()
results.append(result)
#分析結(jié)果
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)
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling two D6 1000 times." #hist標(biāo)題
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) #將一系列值添加到圖標(biāo)中
hist.render_to_file('dice_visual.svg') #將圖標(biāo)渲染為一個(gè)svg文件
#print(frequencies)
#print(results)
max_result=die_1.num_sides+die_2.num_sides
兩個(gè)點(diǎn)數(shù)相加最大之和12,存儲(chǔ)在max_result當(dāng)中
效果圖如下:

8、同時(shí)擲兩個(gè)面數(shù)不同的骰子
上述第7點(diǎn)中擲的是兩個(gè)相同的D6骰子,現(xiàn)實(shí)我們嘗試著操作兩個(gè)不同面得的骰子,擲這兩個(gè)骰子50000次的結(jié)果如何。
新建different_dice.py文件
**from matp.touzi.die import Die
import pygal
#創(chuàng)建一個(gè)D6骰子和D10骰子
die_1=Die()
die_2=Die(10) #傳遞了第二個(gè)骰子實(shí)參為10
#擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中
results=[]
for roll_num in range(50000):
result=die_1.roll()+die_2.roll()
results.append(result)
#分析結(jié)果
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)
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling a D6 and a D10 50000 times." #hist標(biāo)題
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) #將一系列值添加到圖標(biāo)中
hist.render_to_file('different_dice.svg') #將圖標(biāo)渲染為一個(gè)svg文件
#print(frequencies)
#print(results)**
效果圖如下:

綜上模擬擲骰子完畢?。?!
附上完整的die.py和die_visual.py和dice_visual.py和different_dice.py文件
die.py
from random import randint class Die(): """表示一個(gè)骰子的類(lèi)""" def __init__(self, num_sides=6): #_init_()接受一個(gè)可選參數(shù),如果沒(méi)有指定任何實(shí)參,面數(shù)默認(rèn)為6 """骰子默認(rèn)為六面""" self.num_sides = num_sides def roll(self): #方法roll()使用randint()來(lái)返回 """返回一個(gè)位于1和骰子面熟之間的隨機(jī)值""" return randint(1,self.num_sides)
die_visual.py
from matp.touzi.die import Die
import pygal
#創(chuàng)建一個(gè)Die實(shí)例
die=Die()
#擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中
results=[]
for roll_num in range(1000):
result=die.roll()
results.append(result)
#分析結(jié)果
frequencies=[]
for value in range(1,die.num_sides+1):
frequency=results.count(value)
frequencies.append(frequency)
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling one D6 1000 times." #hist標(biāo)題
hist.x_labels=['1','2','3','4','5','6']
hist.x_title="Result"
hist.y_title="Frequency of Result"
hist.add('D6',frequencies) #將一系列值添加到圖標(biāo)中
hist.render_to_file('die_visual.svg') #將圖標(biāo)渲染為一個(gè)svg文件
#print(frequencies)
#print(results)
dice_visual.py
from matp.touzi.die import Die
import pygal
#創(chuàng)建兩個(gè)D6骰子
die_1=Die()
die_2=Die()
#擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中
results=[]
for roll_num in range(1000):
result=die_1.roll()+die_2.roll()
results.append(result)
#分析結(jié)果
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)
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling two D6 1000 times." #hist標(biāo)題
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) #將一系列值添加到圖標(biāo)中
hist.render_to_file('dice_visual.svg') #將圖標(biāo)渲染為一個(gè)svg文件
#print(frequencies)
#print(results)
different_dice.py
from matp.touzi.die import Die
import pygal
#創(chuàng)建一個(gè)D6骰子和D10骰子
die_1=Die()
die_2=Die(10)
#擲幾次骰子,并將結(jié)果存儲(chǔ)在一個(gè)列表中
results=[]
for roll_num in range(50000):
result=die_1.roll()+die_2.roll()
results.append(result)
#分析結(jié)果
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)
#對(duì)結(jié)果進(jìn)行可視化
hist=pygal.Bar() #創(chuàng)建一個(gè)實(shí)例,并將其儲(chǔ)存在hist中
hist.title="Result of rolling a D6 and a D10 50000 times." #hist標(biāo)題
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) #將一系列值添加到圖標(biāo)中
hist.render_to_file('different_dice.svg') #將圖標(biāo)渲染為一個(gè)svg文件
#print(frequencies)
#print(results)
總結(jié)
到此這篇關(guān)于Pycharm中安裝Pygal并使用Pygal模擬擲骰子的文章就介紹到這了,更多相關(guān)Pycharm安裝Pygal模擬擲骰子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
《Python學(xué)習(xí)手冊(cè)》學(xué)習(xí)總結(jié)
本篇文章是讀者朋友在學(xué)習(xí)了《Python學(xué)習(xí)手冊(cè)》這本書(shū)以后,總結(jié)出的學(xué)習(xí)心得,值得大家參考學(xué)習(xí)。2018-01-01
Python使用PyYAML庫(kù)進(jìn)行配置文件管理
在現(xiàn)代軟件開(kāi)發(fā)中,配置文件管理已經(jīng)成為了一個(gè)不可或缺的環(huán)節(jié),本文主要為大家詳細(xì)介紹了如何使用Python中的PyYAML庫(kù)來(lái)操作YAML文件,以及YAML文件的一些優(yōu)缺點(diǎn),希望對(duì)大家有所幫助2023-12-12
flask中響應(yīng)錯(cuò)誤的處理及errorhandler的應(yīng)用方式
這篇文章主要介紹了flask中響應(yīng)錯(cuò)誤的處理及errorhandler的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
jupyter notebook參數(shù)化運(yùn)行python方式
這篇文章主要介紹了jupyter notebook參數(shù)化運(yùn)行python方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
OpenCV Python實(shí)現(xiàn)拼圖小游戲
這篇文章主要為大家詳細(xì)介紹了OpenCV Python實(shí)現(xiàn)拼圖版小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
python進(jìn)階_淺談面向?qū)ο筮M(jìn)階
Python?multiprocessing?共享對(duì)象的示例代碼

