Python16 :模擬骰子出現的點數,做統計,並使用pygal庫繪製直方圖
阿新 • • 發佈:2019-01-11
首先,分析一下問題。
對於一個骰子來說,總共有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')