Python學習筆記 使用Pygal模擬擲骰子

2021-10-03 21:39:38 字數 3406 閱讀 1094

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

"""created on sat mar 14 21:26:55 2020

@author: 86159

"""# use #%% to create cells;run current cell(ctrl+enter)

#pygal:生成可縮放的向量圖形檔案

#對於需要在不同的螢幕上顯示的圖表,這很有用,因為它們將自動縮放,以適合**者的螢幕

#在這個專案中,將對擲骰子的結果進行分析

#在數學領域,常用擲骰子來解釋各種資料分析,它在賭場和其他博弈場景中也得到了實際應用,例如遊戲大富翁以及眾多角色扮演遊戲中

#%%#擲骰子

from die import die #from 模組名 import 類名

#建立乙個d6

die=die()

x=die.roll()#擲一次骰子

print(x)

#%%#擲骰子多次--乙個

import pygal

#自己編寫的模組放在下面,分隔開

from die import die

die=die(8)#建立乙個8面骰子

results=#儲存多次擲骰子的結果,型別為列表

for roll_num in range(1000):#迴圈100次

x=die.roll()#方法返回值是本次擲骰子的結果

#print(results)#觀察結果,值的範圍為[1,8]

#for result in results:#遍歷列表元素

# print(str(result)+' ',end='')

#分析結果

freq_dict={}#儲存每個值出現的次數,型別為字典,元素為鍵-值對,鍵是數值 值是出現次數

freq_list=

for value in range(1,die.num_sides+1):

ct=results.count(value)#統計value在列表results**現的次數

freq_dict[value]=ct#在字典中(末尾)插入新元素,字典名[鍵]=值,鍵的型別可以為數字、字串

print("\n",freq_dict)

for key,value in freq_dict.items():#遍歷字典

print(str(key)+":"+str(value))

#繪製直方圖

#對結果進行視覺化

hist=pygal.bar()#建立乙個pygal.bar()例項

hist.title="results of rolling one d8 1000 times"#標示直方圖的字串

hist.x_labels=['1','2','3','4','5','6','7','8']#擲骰子的可能結果用作x軸的標籤

hist.x_title="result"#給x軸新增標題

hist.y_title="frequency of result"

hist.add("d8",freq_list)#將一系列值新增到圖表中,.add(title,values,**kwargs) values型別應該為列表,title為給新增的值指定的標籤

hist.render_to_file("die_visual.svg")#將圖表渲染為乙個svg檔案,副檔名必須為.svg;在web瀏覽器中檢視生成的直方圖

#%%#擲骰子--兩個

import pygal

from die import die

#建立兩個die例項,代表兩個骰子

die_1=die()

#die_2=die()

die_2=die(8)#8面骰子,傳遞實參8,修改預設值6

#擲骰子的結果

results=

for roll_num in range(10000):#設定擲骰子的次數

result=die_1.roll()+die_2.roll()

#分析資料--統計出現頻次

frequences=

max_num=die_1.num_sides+die_2.num_sides

for value in range(2,max_num+1):#兩個骰子之和的取值範圍為[2,max_num],最小值是2

freq=results.count(value)

print(frequences)

#視覺化結果

hist=pygal.bar()

#hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']#兩個6面骰子

#hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12','13','14']#乙個6面,乙個8面

hist.x_labels=[x for x in range(2,max_num+1)]#使用列表解析[變數 迴圈],x_labels值自動生成;[str(x) for x in range(2,max_num+1)]也可以

#hist.title="results of rolling two d6 dice 1000 times"

hist.title="results of rolling a d6 and a d8 10000 times"

hist.x_title="result"

hist.y_title="frequency of result"

hist.add("d6+d8",frequences)

#hist.render_to_file("dd66_visual.svg")

hist.render_to_file("d6d8_visual.svg")

die.py

#建立die類

from random import randint#隨機整數randint(s,e) 返回值取值範圍為[起始值,終止值],整數

class die():

'''表示乙個骰子的類'''

def __init__(self,num_sides=6):#可選引數,骰子預設指6面的,d6;8面的骰子名為d8

'''骰子預設為6面'''

self.num_sides=num_sides

def roll(self):

'''返回乙個位於1和骰子面數之間的隨機值'''

return randint(1,self.num_sides)#返回起始值1、終止值num_sides或這兩個值之間的任何整數

Python遊戲開發 Mac完美安裝pygame

pygame是python的2d遊戲開發庫,優點是秉承了python風格,簡單好用 最近在macos high sierra10.13.5上安裝pygame時遇到了一些問題 經過一晚上的折騰,終於找到了正確的解決方法,分享一下 通過brew安裝依賴包 brew install sdl smpeg s...

Python學習筆記 使用 future

根據廖雪峰python教程整理 使用 future python的每個新版本都會增加一些新的功能,或者對原來的功能作一些改動。有些改動是不相容舊版本的,也就是在當前版本執行正常的 到下乙個版本執行就可能不正常了。從python 2.7 到python 3.x 就有不相容的一些改動,比如 2.x裡的字...

學習筆記 python使用SQLite

python運算元據庫系列 python使用sqlite python操作redis python操作mysql 5.修改資料 6.刪除資料 三 全部 四 總結 sqlite不是乙個客服端 伺服器結構的資料庫引擎,而是一種嵌入式資料庫,它的資料庫就是乙個檔案。sqlite將整個資料庫,包括定義 表 ...