python--模拟掷骰子游戏

通过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()


绘图结果如下图所示:
python--模拟掷骰子游戏_第1张图片

你可能感兴趣的:(如何解决系列,python,游戏,开发语言)