天天看點

python--模拟擲骰子遊戲通過python模拟擲骰子的遊戲

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


           

繪圖結果如下圖所示:

python--模拟擲骰子遊戲通過python模拟擲骰子的遊戲