通过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()
绘图结果如下图所示: