Python程式設計 從入門到實踐 第十五章練習題

2021-10-01 15:58:10 字數 3470 閱讀 8767

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迴圈和建立新元素的 合併成一行,並自動新增新元素。例...