使用Pygal統計擲骰子情況

首先我們需要創建一個表示骰子的類,骰子是6面的,創建一個類Touzi,這個類定義了自己的屬性size=6,定義了擲骰子的方法zhitouzi,這個方法返回一個1-6的隨機數,這裏用randint方法返回。

python種的random.randint(a,b)方法用於生成一個屬於a,b之間(包括a,b)的隨機整數,要使用randint需要從random庫導入

from random import randint
import pygal
class Touzi():
    def __init__(self,size=6):
        self.size=size
    def zhitouzi(self):
        return randint(1,self.size)

我們創建了一個骰子,接下來我們調用它,看看是不是返回了一個1-6的數

touzi=Touzi()
a=touzi.zhitouzi()
print(a)

好,經運行,結果沒有問題,那麼,現在我們來嘗試擲這個骰子100次,並獲取到這100次的結果。怎麼獲取這100次的結果呢,我們擲這個骰子100次該怎麼體現呢。
我們需要用range()函數,range函數時python內置函數,用於創建一個整數列表,range(b)默認從0開始,range(a,b),從a開始,到b結束,但不包括b,一般用在for循環,這個for循環裏面,我們調用zhitouzi()方法獲取此次擲骰子的值,然後把這個值存到一個列表裏面,由此我們要創建一個空列表。

results=[]
for value in range(100):
    result=touzi.zhitouzi()
    results.append(result)
print(results)

如此,我們就得到了一個包含100次擲骰子結果的列表。
現在我們來分析這個結果,統計每個數字出現的次數,需要創建一個空列表來存儲這些次數,然後使用for循環,從1-7使用count方法統計每個數字出現的次數。
count() 方法用於統計字符串裏某個字符出現的次數

counts=[]
for value in range(1,7):
    count=results.count(value)
    counts.append(count)
print(counts)

有了頻率列表後,我們就可以繪製一個表示結果的直方圖。我們需要用到pygal庫,pygal是一個SVG圖表庫。SVG是一種矢量圖格式。全稱Scalable Vector Graphics – 可縮放矢量圖形。用瀏覽器打開svg,可以方便的與之交互。

hist=pygal.Bar()
hist.title="Rolling 100 times"
hist.x_labels=range(1,7)
hist.x_title='value'
hist.y_title='count results'
hist.add('D6',counts)
hist.render_to_file('csdn.svg')

結果如下圖
在這裏插入圖片描述
如上就是擲一枚骰子的結果,那麼,如果同時擲兩枚骰子呢,那麼結果就不再只限於1-6了,而是2-12.經過修改後,擲兩枚骰子,完整代碼如下

from random import randint
import pygal
class Touzi():
    def __init__(self,size=6):
        self.size=size
    def zhitouzi(self):
        return randint(1,self.size)
touzi_1=Touzi()
touzi_2=Touzi()
results=[]
for value in range(100):
    result=touzi_1.zhitouzi()+touzi_2.zhitouzi()
    results.append(result)
counts=[]
for value in range(2,13):
    count=results.count(value)
    counts.append(count)

hist=pygal.Bar()
hist.title="Rolling 100 times"
hist.x_labels=range(2,13)
hist.x_title='value'
hist.y_title='count results'
hist.add('D6+D6',counts)
hist.render_to_file('csdn.svg')

結果如下圖
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章