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> <