python投掷骰子实验_Python小程序--模拟掷骰子

案例描述

· 通过计算机程序模拟抛掷骰子,并显示各点数的出现次数及频率

· 比如,抛掷2个骰子50次,出现点数为7的次数是8,频率是0.16

版本1.0

1.0功能:模拟抛掷1个骰子,并输出其结果

如何通过Python模拟随机事件?或者生成随机数?

· random模块

· 遍历列表时,如何同时获取每个元素的索引号及其元素值?

· enumerate()函数

更多random模块的方法请参考:

https://docs.python.org/3/library/random.html

'''

功能:模拟掷骰子

版本:1.0

'''

import random

def roll_dice():

'''

模拟掷骰子

'''

roll = random.randint(1,6)

return roll

def main():

total_times = 10

#初始化列表[0,0,0,0,0,0]

result_list = [0] * 6

for i in range(total_times ):

roll = roll_dice()

for j in range(1,7):

if roll == j:

result_list [j-1] += 1

for i, result in enumerate(result_list):

print('点数{}的次数:{},频率:{}'.format(i + 1, result, result / total_times))

if __name__ == '__main__':

main()

版本2.0

功能:模拟抛掷2个骰子,并输出其结果

如何将对应的点数和次数关联起来?

· zip()函数

'''

功能:模拟掷骰子

版本:2.0

'''

import random

def roll_dice():

'''

模拟掷骰子

'''

roll = random.randint(1,6)

return roll

def main():

total_times = 100

#初始化列表[0,0,0,0,0,0]

result_list = [0] * 11

#初始化点数列表

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list ,result_list )) #元组结构

for i in range(total_times ):

roll1 = roll_dice()

roll2 = roll_dice()

for j in range(2,13):

if (roll1+roll2) == j:

roll_dict[j] += 1

#遍历列表

for i, result in roll_dict.items():

print('点数{}的次数:{},频率:{}'.format(i, result, result / total_times))

if __name__ == '__main__':

main()

版本3.0

功能:可视化抛掷2个骰子的结果

Python数据可视化

· matplotlib模块

matplotlib是一个数据可视化函数库

· matplotlib的子模块pyplot提供了2D图表制作的基本函数

· 例子:https://matplotlib.org/gallery.html

'''

功能:模拟掷骰子

版本:3.0

'''

import random

import matplotlib.pyplot as plt

def roll_dice():

'''

模拟掷骰子

'''

roll = random.randint(1,6)

return roll

def main():

total_times = 100

#初始化列表[0,0,0,0,0,0]

result_list = [0] * 11

#初始化点数列表

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list ,result_list )) #元组结构

# 记录骰子的结果

roll1_list = []

roll2_list = []

for i in range(total_times ):

roll1 = roll_dice()

roll2 = roll_dice()

roll1_list.append(roll1)

roll2_list.append(roll2)

for j in range(2,13):

if (roll1+roll2) == j:

roll_dict[j] += 1

#遍历列表

for i, result in roll_dict.items():

print('点数{}的次数:{},频率:{}'.format(i, result, result / total_times))

#数据可视化

x = range(1,total_times +1)

plt.scatter (x,roll1_list ,c='red',alpha = 0.5) #alpha:透明度 c:颜色

plt.scatter (x, roll2_list, c='green',alpha=0.5)

plt.show()

if __name__ == '__main__':

main()

版本4.0

功能:对结果进行简单的数据统计和分析

简单的数据统计分析

· matplotlib直方图

'''

功能:模拟掷骰子

版本:4.0

'''

import random

import matplotlib.pyplot as plt

# 解决中文显示问题

plt.rcParams['font.sans-serif'] = ['SimHei'] #SimHei黑体

plt.rcParams['axes.unicode_minus'] = False

def roll_dice():

'''

模拟掷骰子

'''

roll = random.randint(1,6)

return roll

def main():

total_times = 100

# 记录骰子的结果

roll_list=[]

for i in range(total_times ):

roll1 = roll_dice()

roll2 = roll_dice()

roll_list.append(roll1 + roll2)

#数据可视化

plt.hist(roll_list ,bins=range(2,14),normed= 1,edgecolor='black',linewidth=1)

#edgeclor:边缘颜色 linewidth:边缘宽度 normed=1时转化为概率图

plt.title('骰子点数统计') #名称

plt.xlabel('点数')

plt.ylabel('频率')

plt.show()

if __name__ == '__main__':

main()

版本5.0

功能:使用科学计算库简化程序,完善数据可视化结果

使用科学计算库NumPy简化程序

NumPy的操作对象是多维数组ndarray

· ndarray.shape 数组的维度

· 创建数组:np.array(),np.arrange() …

· 改变数组形状 reshape()

NumPy创建随机数组

· np.random.randint(a, b, size)

创建 [a, b)间形状为size的数组

NumPy基本运算

· 以数组为对象进行基本运算,即向量化操作

· 例如:

np.histogram() 直接输出直方图统计结果

matplotlib绘图补充

· plt.xticks() 设置x坐标的坐标点位置及标签

· plt.title()设置绘图标题

· plt.xlabel(), plt.ylabel() 设置坐标轴的标签

'''

功能:模拟掷骰子

版本:5.0

'''

import random

import matplotlib.pyplot as plt

import numpy as np

# 解决中文显示问题

plt.rcParams['font.sans-serif'] = ['SimHei'] #SimHei黑体

plt.rcParams['axes.unicode_minus'] = False

def roll_dice():

'''

模拟掷骰子

'''

roll = random.randint(1,6)

return roll

def main():

total_times = 1000

# 记录骰子的结果

roll1_arr = np.random.randint(1,7,size=total_times)

roll2_arr = np.random.randint(1, 7, size=total_times)

result_arr = roll1_arr + roll2_arr

# hist,bins = np.histogram(result_arr ,bins=range(2,14))

# print(hist)

# print(bins)

#数据可视化

plt.hist(result_arr ,bins=range(2,14),normed= 1,edgecolor='black',linewidth=1,rwidth= 0.8)

#edgeclor:边缘颜色 linewidth:边缘宽度 normed=1时转化为概率图 rwidth:柱子宽度

#设置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('骰子点数统计') #名称

plt.xlabel('点数')

plt.ylabel('频率')

plt.show()

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值