1. 程式人生 > >Python16 :模擬骰子出現的點數,做統計,並使用pygal庫繪製直方圖

Python16 :模擬骰子出現的點數,做統計,並使用pygal庫繪製直方圖

首先,分析一下問題。

          對於一個骰子來說,總共有6面,所以,我們可以建立一個骰子類,初始化一個屬性為num_sides(面數)。

         緊接著,我們模擬擲骰子,要模擬擲骰子,無非是隨機出現一個1-6的值而已,因此,我們可以用random庫中的randint方法,返回一個整數值。

          那麼,模擬多少次呢?還有就是,如何做統計呢?

          從理論上講,模擬的次數越多,統計的數值越明顯。這裡咱們預計模擬1000次。

          做統計的話,就是統計1-6每個數字在模擬的這1000次中分別出現了多少次,這個操作可以用列表的count()方法實現。

程式碼分析:

          骰子類(die.py)程式碼如下所示:

from random import randint

class Die():
    '''表示一個骰子的類'''

    def __init__(self,num_sides=6):
        '''骰子預設為六面'''
        self.num_sides = num_sides

    def roll(self):
        '''返回一個位於1和骰子面數之間的隨機數'''
        return randint(1,self.num_sides)

          模擬並做視覺化操作(die_visual.py)程式碼如下所示:

from data.die import Die
import pygal

# 建立一個D6
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)        # 統計產生的骰子結果,出現點數中1-6分別有多少次
    frequencies.append(frequency)
print(frequencies)

# 對結果進行視覺化
hist = pygal.Bar()

hist.title = 'Results of rolling 1000 times'
hist.x_labels = ['1','2','3','4','5','6']
hist._x_title = 'result'
hist._y_title = 'counts'


# 我們使用add() 將一系列值新增到圖表中 (向它傳遞要給新增的值指定的標籤,還有一個列表,其中包含將出現在圖表中的值)
hist.add('D6',frequencies)
# 我們將這個圖表渲染為一個SVG檔案,這種檔案的副檔名必須為.svg
# svg檔案 用瀏覽器開啟
hist.render_to_file('die_visual.svg')