本文摘自php中文网,作者零到壹度,侵删。
本篇文章给大家分享的内容是关于python知识分解析掷骰子游戏 ,有着一定的参考价值,有需要的朋友可以参考一下。最近学习了点统计学及python知识,试着分析下掷骰子游戏。骰子按标准6面,分析一次投1颗、2颗、3颗、4颗,投掷10、100、1000、10000次时的结果。
使用工具
Jupyter Notebook 分析利器
matplotlib、pygal 可视化包
1、猜次数
1 2 3 4 5 6 7 | # 导入包
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 利用随机数据模拟掷骰子
# 每次显示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
|
1 2 3 | # 打印投掷结果
print (getData(1,10)) # 1个骰子掷10次
print (getData(2,5)) # 2个骰子掷5次
|
1 2 | [2, 2, 2, 2, 1, 6, 4, 4, 5, 5]
[4, 3, 5, 6, 2, 2, 3, 6, 4, 4]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 分析结果# 统计每个数字出现的次数并显示图片
# 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)

1 2 3 4 | # 2个骰子掷10,100, 1000, 10000次结果分析showResult(2,10)
showResult(2,100)
showResult(2,1000)
showResult(2,10000)
|

3个骰子、4个骰子就不再截图了。
我们发现在投掷的次数越多,每个数出现的概率越接近,最后趋向于相同。
2、猜大小
1 2 3 4 5 6 7 8 9 10 11 12 | # 每次投掷点数和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
|
1 | # 打印投掷结果 print (getData2(1,10)) # 1个骰子掷10次 print (getData2(2,5)) # 2个骰子掷5次
|
1 2 | [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颗骰子猜大小没多大意义,我们直接来分析两骰子的情况。
1 2 3 4 | # 2个骰子掷10,100, 1000, 10000次结果分析showResult2(2,10)
showResult2(2,100)
showResult2(2,1000)
showResult2(2,10000)
|

1 2 3 4 | # 3个骰子掷10,100, 1000, 10000次结果分析showResult2(3,10)
showResult2(3,100)
showResult2(3,1000)
showResult2(3,10000)
|

1 2 3 4 | # 4个骰子掷10,100, 1000, 10000次结果分析showResult2(4,10)
showResult2(4,100)
showResult2(4,1000)
showResult2(4,10000)
|

从上面几图中我们可以看到,当投掷次数足够多时,出现大/小点数出现的概率基本相同,点数大小呈现正态分布的特点。
相关推荐:
掷骰子游戏-C语言实现
掷骰子游戏
C++掷骰子游戏
练手小程序:craps掷骰子游戏
掷骰子问题
以上就是python知识分解析掷骰子游戏的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python如何读取sqlite数据库的文件?
总结关于Python中的中文编码问题
Python中的yield关键字的用法介绍(代码示例)
Python实现各种最优化算法
Python初学者应该了解的知识
Python如何实现简单的用户交互程序(示例)
Python操作mysql模拟银行转账操作的简单实例
Python是开源的吗
Python怎么下载easygui
Python如何输出九九乘法表
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python知识分解析掷骰子游戏