模擬擲骰子(Python)

2021-10-03 14:21:34 字數 4319 閱讀 7197

模擬擲骰子實際是抽取(1~6之間的)隨機數問題,涉及random模組,後面版本的資料視覺化主要應用matplotlib.pyplot模組。

1.0:模擬乙個骰子的結果。首先定義roll_dice()函式,從1~6之間隨機抽取乙個整數作為擲骰子的結果。在主函式中定義乙個長度為6的列表(初始值為0),記錄每個點出現的次數。每次擲完骰子都進行判斷,擲出的點數在對應的列表位置上的元素加1。enumerate()函式將列表索引與對應的元素一一對應起來。

"""

模擬擲骰子

1.0:輸出結果為擲骰子的頻數與頻率

"""import random

def roll_dice():

"""模擬擲骰子

:return: 返回乙個1-6之間的隨機數

"""roll = random.randint(1,6)

return roll

def main():

times = 10000

result_list = [0] * 6

for i in range(times):

roll = roll_dice()

for j in range(1,7):

if roll == j:

result_list[j-1] += 1

for k,result in enumerate(result_list):

print ("擲得數字{},次數為{},頻率為{}".format(k+1,result,result/times))

if __name__=="__main__":

main()

2.0:模擬擲兩個骰子的結果。與1.0不同的是,2.0定義兩個列表,乙個記錄點數,乙個記錄點數出現的次數。zip()函式對兩個列表進行組合,以元組的形式輸出,dict(zip())函式將兩個列表的元素以字典的形式輸出。

"""

模擬擲骰子

2.0:模擬擲兩個骰子的結果

"""import random

def roll_dice():

"""模擬擲骰子

:return: 返回乙個1-6之間的隨機數

"""roll = random.randint(1,6)

return roll

def main():

times = 1000

result_list = [0] * 11

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list,result_list))

for i in range(times):

roll1 = roll_dice()

roll2 = roll_dice()

for j in range(2,13):

if roll1 + roll2 == j:

roll_dict[j] += 1

for k,result in roll_dict.items():

print ("擲得數字{},次數為{},頻率為{}".format(k,result,result/times))

if __name__=="__main__":

main()

3.0:將兩個骰子的結果用散點圖視覺化,這裡要用到matplotlib.python庫。為了便於將兩個骰子的結果分別視覺化,定義連個列表,分別記錄每個骰子的結果。plt.scatter()函式中的引數alpha表示透明度。

"""

模擬擲骰子

3.0:將擲兩個骰子的結果視覺化

"""import random

import matplotlib.pyplot as plt

def roll_dice():

"""模擬擲骰子

:return: 返回乙個1-6之間的隨機數

"""roll = random.randint(1,6)

return roll

def main():

times = 10

result_list = [0] * 11

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list,result_list))

roll1_result =

roll2_result =

for i in range(times):

roll1 = roll_dice()

roll2 = roll_dice()

for j in range(2,13):

if roll1 + roll2 == j:

roll_dict[j] += 1

for k,result in roll_dict.items():

print ("擲得數字{},次數為{},頻率為{}".format(k,result,result/times))

#資料視覺化

plt.scatter(range(times),roll1_result,alpha=0.5,c="red")

plt.scatter(range(times), roll2_result, alpha=0.5, c="green")

plt.show()

if __name__=="__main__":

main()

4.0:用直方圖視覺化擲骰子的結果。函式中的引數normed=1可將y軸顯示為頻率。

"""

模擬擲骰子

4.0:直方圖視覺化擲骰子結果

"""import random

import matplotlib.pyplot as plt

plt.rcparams["font.sans-serif"] = ["simhei"]

plt.rcparams["axes.unicode_minus"] = false

def roll_dice():

"""模擬擲骰子

:return: 返回乙個1-6之間的隨機數

"""roll = random.randint(1,6)

return roll

def main():

times = 1000

roll_list =

for i in range(times):

roll1 = roll_dice()

roll2 = roll_dice()

plt.hist(roll_list, bins=range(2,14), normed=1,edgecolor="black",linewidth=1)

plt.title ("擲骰子結果")

plt.xlabel("點數")

plt.ylabel("頻率")

plt.show()

if __name__=="__main__":

main()

5.0:涉及科學計算numpy庫。在numpy中的列表可直接相加。

"""

模擬擲骰子

4.0:科學計算

"""import numpy as np

import matplotlib.pyplot as plt

plt.rcparams["font.sans-serif"] = ["simhei"]

plt.rcparams["axes.unicode_minus"] = false

def main():

times = 1000

roll_list =

roll1 = np.random.randint(1,7,size=times)

roll2 = np.random.randint(1,7, size=times)

roll_list = roll1 + roll2

plt.hist(roll_list, bins=range(2,14), normed=1,edgecolor="black",linewidth=1,rwidth=0.8)

plt.title ("擲骰子結果")

tick_labels = ["2點","3點","4點","5點","6點","7點","8點","9點","10點","11點","12點"]

tick_pos = np.arange(2,13)+0.5

plt.xticks(tick_pos, tick_labels)

plt.xlabel("點數")

plt.ylabel("頻率")

plt.show()

if __name__=="__main__":

main()

FPGA模擬擲骰子

每按同乙個按鍵時會隨機得到乙個1 6中的乙個隨機數字,並用數碼管顯示得到的數值。對兩次按鍵得到的數值進行比較,若前者大,則最低兩位led顯示為 亮 滅 後者較大,則最後兩位led顯示狀態改為 滅 亮 本次課程設計的實質是使數碼管隨機顯示乙個數字,以達擲骰子時隨機出數的效果,因此在小組討論並查閱資料後...

使用Pygal模擬擲骰子

將使用python視覺化包pygal來生成可縮放的向量圖形檔案。對於需要在尺寸 不同的螢幕上顯示的圖表,這很有用,因為它們將自動縮放,以適合 者的螢幕。使用pygal來建立直方圖 from random import randint class die 表示乙個骰子的類 def init self,...

leetcode演算法題 擲骰子模擬

動態規劃 dp i j k 表示投擲第i次,點數為j,k表示連續次數狀態轉移 j出現一次的組合數等於上一輪投出非點數j的所有情況和 dp i j 1 sum dp i 1 j 本輪投出連續k次的點數j的數量情況等於上一輪連續投出k 1次的點數j的數量情況 dp i j k dp i 1 j k 1 ...