通過python模拟擲骰子的遊戲
題目是:
雙骰子賭博遊戲玩法如下。玩家投擲兩個骰子,如果點數和是7或者11,那麼該玩家勝,計算玩1000次後玩家勝的機率。
模拟1000次之後,輸出結果并繪制直方圖顯示計算各點數的分布。
由于每次擲骰子結果都是随機的,是以最終顯示的機率每次運作程式都不同。
python 代碼如下所示:
# -*- coding: utf-8 -*-
"""
Created on %(date)s
@author: %(jixianpu)s
Email : [email protected]
introduction : keep learning althongh walk slowly
"""
import numpy as np
import matplotlib.pyplot as plt
import random
############################################################################################
########### 定義函數,模拟擲骰子的功能,每次結果都不一樣,結果是随機的
############################################################################################
def roll_dice():
# 模拟擲骰子
roll = random.randint(1, 6)
return roll
############################################################################################
########### 建議一個二維空數組,第一次元100為模拟次數,
########### 第二次元分布表示:相加之和不是7和11的結果;相加之和是7和11的結果;所有兩次相加的結果
############################################################################################
# 記錄骰子的結果
def main():
num = 1000
roll_list = np.zeros((num,3))
for i in range(num):
# print(i)
roll1 = roll_dice()
roll2 = roll_dice()
x = roll1+roll2
roll_list[i,2]=x
if (x==7)| (x==11):
roll_list[i,1] = x
print('you win'+'point='+str(x))
# break
else:
roll_list[i,0] = x
print('you lose'+'point='+str(x))
############################################################################################
########### calculation the frequency
############################################################################################
fre1 = len(roll_list[:,1][roll_list[:,1]==7])
fre2 = len(roll_list[:,1][roll_list[:,1]==11])
frequency = (fre1+fre2)/len(range(num))
#
# result = roll_list[:,2]
# idx = np.where((result==7)|(result==11))[0]
# res_2 = idx[0:2]
# data = result[0:(res_2[1]+1)]
# frequency2 = 2/len(data)
# print('赢兩次的機率為'+str(frequency2))
############################################################################################
########### plot the result of game
############################################################################################
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(dpi=200)
plt.hist(roll_list[:,2], bins=range(2, 14), edgecolor='black', linewidth=1, rwidth=0.8)
# 設定X軸坐标點
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.title(str(num)+'次擲骰子(2個)結果win的機率為:'+str(frequency))
plt.xlabel('點數')
plt.ylabel('頻率')
plt.show()
if __name__ == '__main__':
main()
繪圖結果如下圖所示: