通过python模拟掷骰子的游戏
题目是:
双骰子赌博游戏玩法如下。玩家投掷两个骰子,如果点数和是7或者11,那么该玩家胜,计算玩1000次后玩家胜的概率。
模拟1000次之后,输出结果并绘制直方图显示计算各点数的分布。
由于每次掷骰子结果都是随机的,所以最终显示的概率每次运行程序都不同。
python 代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on %(date)s
@author: %(jixianpu)s
Email : 211311040008@hhu.edu.cn
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()
绘图结果如下图所示: