1. 程式人生 > >使用pygal統計投擲N次骰子之後點數的分布情況

使用pygal統計投擲N次骰子之後點數的分布情況

可視化 clas file gpo mes 計算 result 完整 次數

一、環境信息

python版本:2.7.13

pygal版本:2.4.0

pygal安裝:pip install pygal 從python官方完整下載的最新的python版本自帶pip

二、具體實現

投擲N次骰子,然後統計每個點數出現的數字。首先需要實現的是隨機點數,具體代碼如下:

dice.py
# -*- coding: utf-8 -*-
#pip install pygal

from random import randint

class Dice():
    """表示一個骰子的類"""

    def __init__(self, number_sides=6):
        
"""骰子默認為6面,稱之為D6;如果是8面的骰子稱之為D8""" self.number_sides = number_sides def roll(self): """返回一個位於1和骰子面數之間的隨機值""" return randint(1, self.number_sides)

1、投擲一個6面的骰子(D6)10000次,查看每個點數的統計結果:

dice_visual.py
# -*- coding: utf-8 -*-

import pygal

from dice import Dice

#擲一個骰子
#創建一個D6
dice = Dice()

#將結果存儲在一個列表中 results = [] for roll_number in range(10000): result = dice.roll() results.append(result) #分析結果:計算每個點數出現的次數 frequencies = [] values = [] for value in range(1, dice.number_sides+1): frequency = results.count(value) #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素 frequencies.append(frequency) values.append(value)
#對結果進行可視化 hist = pygal.Bar() #設置直方圖的標題 hist.title = Results of rolling one D6 1000 times. #設置x軸的值 hist.x_labels = values #設置x軸的標簽 hist.x_title = Result #設置y軸的標題 hist.y_title = Frequency of Result #將x軸標簽的值添加到直方圖中 hist.add(D6, frequencies) #將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件 hist.render_to_file(dice_visual.svg)

打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:

技術分享圖片

2、同時投擲兩個6面的骰子(D6)10000次,查看每個點數的統計結果,只需要修改dice_visual.py:

dice_visual.py

# -*- coding: utf-8 -*-

import pygal

from dice import Dice

#同時擲兩個6面的骰子10000次
dice1 = Dice()
dice2 = Dice()

#將結果存儲在一個列表中
results = []
for roll_number in range(10000):
    result1 = dice1.roll()
    result2 = dice2.roll()
    results.append(result1 + result2)

#分析結果:計算每個點數出現的次數
frequencies = []
values = []
for value in range(2, dice1.number_sides+dice2.number_sides+1):
    frequency = results.count(value)    #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素
    frequencies.append(frequency)
    values.append(value)

#對結果進行可視化
hist = pygal.Bar()
#設置直方圖的標題
hist.title = Results of rolling one D6 1000 times.
#設置x軸的值
hist.x_labels = values
#設置x軸的標簽
hist.x_title = Result
#設置y軸的標題
hist.y_title = Frequency of Result
#將x軸標簽的值添加到直方圖中
hist.add(D6 + D6, frequencies)
#將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件
hist.render_to_file(dice_visual.svg)
打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:

技術分享圖片

3、同時投擲一個6面的骰子(D6)和一個10面的骰子(D10)10000次,查看每個點數的統計結果,只需要修改dice_visual.py:

dice_visual.py
# -*- coding: utf-8 -*-

import pygal

from dice import Dice

#擲兩個個骰子,一個6面,一個10面
dice1 = Dice()
dice2 = Dice(10)

#將結果存儲在一個列表中
results = []
for roll_number in range(10000):
    result1 = dice1.roll()
    result2 = dice2.roll()
    results.append(result1 + result2)

#分析結果:計算每個點數出現的次數
frequencies = []
values = []
for value in range(2, dice1.number_sides+dice2.number_sides+1):
    frequency = results.count(value)    #lsit.count(ojb)用於統計某個元素列表中出現的次數。obj是列表中的元素
    frequencies.append(frequency)
    values.append(value)

#對結果進行可視化
hist = pygal.Bar()
#設置直方圖的標題
hist.title = Results of rolling one D6 1000 times.
#設置x軸的值
hist.x_labels = values
#設置x軸的標簽
hist.x_title = Result
#設置y軸的標題
hist.y_title = Frequency of Result
#將x軸標簽的值添加到直方圖中
hist.add(D6 + D10, frequencies)
#將這個直方圖渲染為一個SVG文件。可以直接使用瀏覽器打開該文件
hist.render_to_file(dice_visual.svg)

打開生成的svg文件(可以用瀏覽器直接打開),結果圖如下:

技術分享圖片

使用pygal統計投擲N次骰子之後點數的分布情況