1. 程式人生 > >python分析擲骰子游戲

python分析擲骰子游戲

最近學習了點統計學及python知識,試著分析下擲骰子游戲。骰子按標準6面,分析一次投1顆、2顆、3顆、4顆,投擲10、100、1000、10000次時的結果。

使用工具
Jupyter Notebook 分析利器
matplotlib、pygal 視覺化包

1、猜次數

1-6中每個數字出現的次數
# 匯入包
import pygal
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'
]=False # 用來正常顯示負號 from random import randint
# 利用隨機資料模擬擲骰子
# 每次顯示1-6中的一個數

num_sides = 6  # 骰子的6個面
def getData(N, times):
    """
    定義函式,獲取投擲資料
    N: 表示一次用幾個骰子投
    times:表示總共投幾次
    """  
    results = []
    for n in range(1,N+1):
        for roll_num in range(times):
            result = randint(1
,num_sides) results.append(result) return results
# 列印投擲結果
print(getData(1,10)) # 1個骰子擲10次
print(getData(2,5))  # 2個骰子擲5次
[2, 2, 2, 2, 1, 6, 4, 4, 5, 5]
[4, 3, 5, 6, 2, 2, 3, 6, 4, 4]
# 分析結果
# 統計每個數字出現的次數並顯示圖片
    # N: 表示一次用幾個骰子投
    # data 表示投擲資料
def showResult(N, times):
    frequencies = []
    for
value in range(1, num_sides+1): frequency = getData(N, times).count(value) frequencies.append(frequency) # 資料視覺化 # 本次利用 pygal 生成SVG格式向量圖 hist = pygal.Bar() hist.title = str(N)+"個骰子擲"+ str(times) +"次的結果" hist.x_labels = ['1','2','3','4','5','6'] hist.x_title = "點數" hist.y_title = "出現次數" hist.add(str(N)+'骰子', frequencies) hist.render_to_file('1-'+str(N)+str(times)+'.svg') # 儲存為向量圖
# 一個骰子擲10,100, 1000, 10000次結果分析
showResult(1,10)
showResult(1,100)
showResult(1,1000)
showResult(1,10000)

這裡寫圖片描述

# 2個骰子擲10,100, 1000, 10000次結果分析
showResult(2,10)
showResult(2,100)
showResult(2,1000)
showResult(2,10000)

這裡寫圖片描述

3個骰子、4個骰子就不再截圖了。

我們發現在投擲的次數越多,每個數出現的概率越接近,最後趨向於相同。

2、猜大小

每次投擲點數和
# 每次投擲點數和
def getData2(N, times):
    """
    定義函式,獲取投擲資料
    N: 表示一次用幾個骰子投
    times:表示總共投幾次
    """  
    results = []
    for roll_num in range(times):
        result = 0
        for n in range(1,N+1):
            result += randint(1,num_sides)
        results.append(result)
    return results
# 列印投擲結果
print(getData2(1,10)) # 1個骰子擲10次
print(getData2(2,5))  # 2個骰子擲5次
[4, 3, 6, 2, 5, 4, 5, 3, 6, 2]
[6, 10, 5, 8, 7]
# 分析結果
# 統計數字和出現的次數並顯示圖片
    # N: 表示一次用幾個骰子投
    # data 表示投擲資料
def showResult2(N, times):
    frequencies = []
    for value in range(N, N*num_sides+1):
        frequency = getData2(N, times).count(value)
        frequencies.append(frequency)


    # 資料視覺化
    # 本次利用 matplotlib 生成圖片
    x_num = N*num_sides+1-N
    idx = np.arange(x_num)
    width = 0.5
    sn = str(N)
    sm = str(times)
    x_labels = [str(n) for n in range(N, N*num_sides+1)]  # X軸刻度

    plt.bar(idx, frequencies, width, color='red', label=sn+'個骰子')
    plt.xlabel('點數和')
    plt.ylabel('出現次數')
    plt.title(sn+'個骰子投擲'+ sm +'次的結果')
    plt.xticks(idx, x_labels)
    plt.legend()  # 顯示圖例
    plt.show()

1顆骰子猜大小沒多大意義,我們直接來分析兩骰子的情況。

#  2個骰子擲10,100, 1000, 10000次結果分析
showResult2(2,10)
showResult2(2,100)
showResult2(2,1000)
showResult2(2,10000)

這裡寫圖片描述

#  3個骰子擲10,100, 1000, 10000次結果分析
showResult2(3,10)
showResult2(3,100)
showResult2(3,1000)
showResult2(3,10000)

這裡寫圖片描述

#  4個骰子擲10,100, 1000, 10000次結果分析
showResult2(4,10)
showResult2(4,100)
showResult2(4,1000)
showResult2(4,10000)

這裡寫圖片描述

從上面幾圖中我們可以看到,當投擲次數足夠多時,出現大/小點數出現的概率基本相同,點數大小呈現正態分佈的特點。

相關推薦

python分析

最近學習了點統計學及python知識,試著分析下擲骰子游戲。骰子按標準6面,分析一次投1顆、2顆、3顆、4顆,投擲10、100、1000、10000次時的結果。 使用工具 Jupyter Notebook 分析利器 matplotlib、pyga

玩eos上的---dice智慧合約

dice智慧合約的操作步驟,在eos的github上有,這裡不再贅述,這裡主要講dice智慧合約的實現。 dice在中文中是骰子。聰明的你已經猜到了,這可能是一個擲骰子游戲,沒錯,這就是一個雙人擲骰子游戲。 現在我們沿著操作步驟看它的實現: 第一步:充

華為機試題——

/*問題描述:   在擲骰子游戲中,會根據所擲數字在地圖中前進幾步,前進完成後需要根據當前地圖位置所示的障礙進行相應操作,其中障礙表示:  1) 9:無障礙  2) 1:停擲一輪,即下輪所擲數字無效; 3) 2:後退兩步,如果已經到起點不再後退; 4) 3:獎勵前進一步 

java聯機版

目前只實現了一個人的客戶端,由服務端進行判斷輸贏,返回結果!人數,可以自行增加! 我使用多執行緒的方式,即每次押注都會通知伺服器端新開執行緒,在參與人數比較少的情況下,不會又問題!但是如果參與人數比較多,由於我的基準值,也就是初始金錢值使用的是同一個靜態變數,必然有可能會造

python

import random def roll_dice (numbers = 3,points = None):     print("<<<<<ROLL THE DICE!>>>>>")     i

python應用-模擬-pygal

print pri ins side sid 技術分享 python應用 ima sel pygal安裝: Linux下: pip install pygal Windows下: python -m pip install pygal 效果如圖: # -*- coding

Jeff與(2018杭電新生賽)

思路:沒去打,沒交過這份程式碼,只是看著題目瞎寫了一份程式碼,但應該沒什麼錯才是,就是簡單dp,或者暴搜亂搞就好了。。。。 #include <cstdio> #include <cstdlib> #include <cstring> #include &

C++實現求解投問題

【問題描述】玩家根據骰子的點數決定走的步數,即骰子點數為1時可以走一步,點數為2時可以走兩步,點數為n時可以走n步。求玩家走到第n步(n≤骰子最大點數且投骰子的方法唯一)時總共有多少種投骰子的方法。 輸入描述:輸入包括一個整數n(1≤n≤6)。 輸出描述:輸出一

Jeff與

Description 骰子大家一定都玩過。 一個骰子有六個面,每個面都有一個數字。對於骰子的每一個面,你都可以通過朝一個方向翻轉90度來獲得另一個面。 現在你有一個骰子,一開始朝上的一面點數

藍橋杯-第七屆省賽javaC組-

骰子游戲 我們來玩一個遊戲。 同時擲出3個普通骰子(6個面上的數字分別是1~6)。 如果其中一個骰子上的數字等於另外兩個的和,你就贏了。 下面的程式計算出你能獲勝的精確概率(以既約分數表示) public class Main { public static int gcd

(JAVA)

importjava.util.Random; importjava.util.*; importjavax.swing.JOptionPane; importjava.io.File; importjava.util.HashMap; importjava.util.Itera

【小程式】搖BETA版

import java.util.Scanner; public class BetGame { public static void main(String[] args) { int allmoney = 5000;//開始有5000

第一個

// duyidu.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <time.h> using namespace std;

JAVA課程作業1--

題目要求: 擲兩個骰子,每個骰子有六面, 分別為1、2、3、4、5、6。檢查這兩個骰子的和。 如果為2、3或12你就輸了;如果和是7或者11你就贏了。 但如果和是其他數字(例如4、5、6、8、9或

【NOIP2012模擬11.1】

Description 滾骰子是一件有益身心健康的運動,因此骰子游戲可是一個很受年輕人歡迎的遊戲。 現在先介紹一下這個聞名遐邇的骰子游戲吧。 首先是主角:骰子。骰子就是很普通的骰子:骰子有六個面,分別標號1到6,三對面上的數字之和均為7。 然後我們介紹這

隨機數

#include"iostream" #include"ctime" #include"cstdlib" using namespace std; int roll() { int i=rand()%6+1;   int j=rand()%6+1;   int

python視覺化——使用pygal模擬

#die.py # coding=gbk from random import randint class Die(): """表示一個骰子的類""" def __init__(sel

3星|《給你講個笑話:我是創業公司CEO》:創業成功就是上帝

第一桶金 管理 一個 kindle 上帝 小時 投資 bsp 合夥人 給你講個笑話:我是創業公司CEO 作者有過數次創業經歷,最後一次在濟南創業,後來公司搬到北京,看書中的交代公司目前好像還不算太成功。書中交代作者公司的業務是文化產品的策劃,沒細說做什麽,也沒說做成過

簡單C 程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用Jquery實現

直接新建一個html頁面,需要在head中引入jquery,js,一些css程式碼以及js程式碼,如下: <script type="text/javascript" src="jquery-1.8.3.min.js"></script> <