1-6中每個(gè)數(shù)字出現(xiàn)的次數(shù)
# 導(dǎo)入包 import pygal import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] # 用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus']=False # 用來(lái)正常顯示負(fù)號(hào) from random import randint
# 利用隨機(jī)數(shù)據(jù)模擬擲骰子 # 每次顯示1-6中的一個(gè)數(shù) num_sides = 6 # 骰子的6個(gè)面 def getData(N, times): """ 定義函數(shù),獲取投擲數(shù)據(jù) N: 表示一次用幾個(gè)骰子投 times:表示總共投幾次 """ results = [] for n in range(1,N+1): for roll_num in range(times): result = randint(1,num_sides) results.append(result) return results
# 打印投擲結(jié)果 print(getData(1,10)) # 1個(gè)骰子擲10次 print(getData(2,5)) # 2個(gè)骰子擲5次
[2, 2, 2, 2, 1, 6, 4, 4, 5, 5] [4, 3, 5, 6, 2, 2, 3, 6, 4, 4]
# 分析結(jié)果# 統(tǒng)計(jì)每個(gè)數(shù)字出現(xiàn)的次數(shù)并顯示圖片 # N: 表示一次用幾個(gè)骰子投 # data 表示投擲數(shù)據(jù)def showResult(N, times): frequencies = [] for value in range(1, num_sides+1): frequency = getData(N, times).count(value) frequencies.append(frequency) # 數(shù)據(jù)可視化 # 本次利用 pygal 生成SVG格式矢量圖 hist = pygal.Bar() hist.title = str(N)+"個(gè)骰子擲"+ str(times) +"次的結(jié)果" hist.x_labels = ['1','2','3','4','5','6'] hist.x_title = "點(diǎn)數(shù)" hist.y_title = "出現(xiàn)次數(shù)" hist.add(str(N)+'骰子', frequencies) hist.render_to_file('1-'+str(N)+str(times)+'.svg') # 儲(chǔ)存為矢量圖
# 一個(gè)骰子擲10,100, 1000, 10000次結(jié)果分析showResult(1,10) showResult(1,100) showResult(1,1000) showResult(1,10000)
# 2個(gè)骰子擲10,100, 1000, 10000次結(jié)果分析showResult(2,10) showResult(2,100) showResult(2,1000) showResult(2,10000)
3個(gè)骰子、4個(gè)骰子就不再截圖了。
我們發(fā)現(xiàn)在投擲的次數(shù)越多,每個(gè)數(shù)出現(xiàn)的概率越接近,最后趨向于相同。
每次投擲點(diǎn)數(shù)和
# 每次投擲點(diǎn)數(shù)和def getData2(N, times): """ 定義函數(shù),獲取投擲數(shù)據(jù) N: 表示一次用幾個(gè)骰子投 times:表示總共投幾次 """ results = [] for roll_num in range(times): result = 0 for n in range(1,N+1): result += randint(1,num_sides) results.append(result) return results
# 打印投擲結(jié)果print(getData2(1,10)) # 1個(gè)骰子擲10次print(getData2(2,5)) # 2個(gè)骰子擲5次
[4, 3, 6, 2, 5, 4, 5, 3, 6, 2] [6, 10, 5, 8, 7]
# 分析結(jié)果# 統(tǒng)計(jì)數(shù)字和出現(xiàn)的次數(shù)并顯示圖片 # N: 表示一次用幾個(gè)骰子投 # data 表示投擲數(shù)據(jù)def showResult2(N, times): frequencies = [] for value in range(N, N*num_sides+1): frequency = getData2(N, times).count(value) frequencies.append(frequency) # 數(shù)據(jù)可視化 # 本次利用 matplotlib 生成圖片 x_num = N*num_sides+1-N idx = np.arange(x_num) width = 0.5 sn = str(N) sm = str(times) x_labels = [str(n) for n in range(N, N*num_sides+1)] # X軸刻度 plt.bar(idx, frequencies, width, color='red', label=sn+'個(gè)骰子') plt.xlabel('點(diǎn)數(shù)和') plt.ylabel('出現(xiàn)次數(shù)') plt.title(sn+'個(gè)骰子投擲'+ sm +'次的結(jié)果') plt.xticks(idx, x_labels) plt.legend() # 顯示圖例 plt.show()
1顆骰子猜大小沒(méi)多大意義,我們直接來(lái)分析兩骰子的情況。
# 2個(gè)骰子擲10,100, 1000, 10000次結(jié)果分析showResult2(2,10) showResult2(2,100) showResult2(2,1000) showResult2(2,10000)
# 3個(gè)骰子擲10,100, 1000, 10000次結(jié)果分析showResult2(3,10) showResult2(3,100) showResult2(3,1000) showResult2(3,10000)
# 4個(gè)骰子擲10,100, 1000, 10000次結(jié)果分析showResult2(4,10) showResult2(4,100) showResult2(4,1000) showResult2(4,10000)
從上面幾圖中我們可以看到,當(dāng)投擲次數(shù)足夠多時(shí),出現(xiàn)大/小點(diǎn)數(shù)出現(xiàn)的概率基本相同,點(diǎn)數(shù)大小呈現(xiàn)正態(tài)分布的特點(diǎn)。
相關(guān)推薦:
練手小程序:craps擲骰子游戲
擲骰子問(wèn)題
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com