15-10 練習使用本章介紹的兩個庫 :嘗試使用 matplotlib 通過視覺化來模擬擲骰子的情況,並嘗試使用 pygal 通過視覺化來模擬隨機漫步的情況。
使用 matplotlib 通過視覺化來模擬擲骰子的情況,效果如下圖:
**:die.py(表示乙個骰子的類)。
預設6個面(num_sides=6),可任意修改這個數字;方法roll用來生成乙個任意數。
from random import randint
class die():
""" 表示乙個骰子的類 """
def __init__(self, num_sides=6):
""" 骰子預設為 6 面 """
self.num_sides = num_sides
def roll(self):
"""" 返回乙個位於 1 和骰子面數之間的隨機值 """
return randint(1, self.num_sides)
die_mpl.py(生成圖表)。
函式「autolabel」用來生成柱形上面的數字,plt.text前兩個為數字的座標,第三個為要顯示的數字值(字串)。
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from die import die
# 顯示柱形上面的數字
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2 - 0.2, height + 1, '%s' % int(height))
# 建立乙個d6和d10
die6 = die()
die10 = die(10)
# 擲幾次骰子,並將結果儲存在乙個列表中
results =
for roll_num in range(1000):
result = die6.roll() + die10.roll()
# 獲取骰子數的迴圈數
num_sides = die6.num_sides + die10.num_sides
name_list = range(2, num_sides + 1)
# 分析結果
frequencies =
for value in name_list:
frequency = results.count(value)
# print(frequency)
# 標題
plt.title('die mpl', pad=10.0, fontsize=24)
# 圖例
plt.legend(handles=[mpatches.patch(color='#d93d0b', label='d6+d10')])
autolabel(plt.bar(range(len(frequencies)), frequencies, color='#d93d0b', tick_label=name_list))
# plt.bar(range(len(frequencies)), frequencies, tick_label=name_list)
plt.show()
使用 pygal 通過視覺化來模擬隨機漫步的情況,效果如下圖:
**:random_walk.py(生成隨機的x, y點)
from random import choice
class randomwalk():
""" 乙個生成隨機漫步資料的類 """
def __init__(self, num_points=5000):
""" 初始化隨機漫步的屬性 """
self.num_points = num_points
# 所有隨機漫步都始於 (0, 0)
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
""" 計算隨機漫步包含的所有點 """
# 不斷漫步,直到列表達到指定的長度
while len(self.x_values) < self.num_points:
x_step = self.get_step()
y_step = self.get_step()
# 拒絕原地踏步
if x_step == 0 and y_step == 0:
continue
# 計算下乙個點的 x 和 y 值
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
def get_step(self):
"""決定前進方向以及沿這個方向前進的距離"""
direction = choice([1, -1])
distance = choice([0, 1, 2, 3, 4])
step = direction * distance
return step
rw_visual_pygal.py(生成svg檔案)。
利用for (x, y) in zip(rw.x_values, rw.y_values)生成元組列表。
import pygal
from random_walk import randomwalk
# 建立乙個 randomwalk 例項,並將其包含的點都繪製出來
rw = randomwalk()
rw.fill_walk()
# 生成座標列表
coordinate =
for (x, y) in zip(rw.x_values, rw.y_values):
xy_chart = pygal.xy(stroke=false)
xy_chart.title = 'randomwalk'
xy_chart.add('randomwalk', coordinate)
xy_chart.render()
# 生成svg檔案
xy_chart.render_to_file('file/randomwalk_pygal.svg')
Python 程式設計 從入門到實踐
1.官網安裝 3.環境配置 務必選中核取方塊add python to path 4.檢視 啟動python版本的命令 python 執行 print hello python world 5.終端執行x.py檔案 python x.py 7.檢視當前目錄中的所有檔案的命令 dir windows系...
python程式設計 從入門到實踐第3章
第三章 列表簡介 1.列表一般用 表示。2.索引從0而不是1開始。通過將索引指定為 1 可讓python返回最後乙個列表元素。4.可使用方法insert 向列表中插入新元素,insert 索引,元素 5.使用del語句根據索引刪除元素 6.方法pop 可刪除列表末尾的元素,並能再使用先前的列表 7....
python程式設計 從入門到實踐 第4章
第四章 操作列表 1.函式range 生成一系列的數字。2.可使用函式list 將range 的結果直接轉換為列表。如果將range 作為list 的引數,輸出將為乙個數字列表。例 numbers list range 1,6 3.列表解析將for迴圈和建立新元素的 合併成一行,並自動新增新元素。例...