要求
知识点提示:
random模块和enumerate()函数的使用
任务要求:
1、知识点提示:random模块和enumerate()函数的使用
2、任务要求:
(1)模拟抛掷1个骰子,并显示各点数出现的次数及频率,如下图示例
(2)模拟抛掷2个骰子,并显示各点数出现的次数及频率,如下图示例
3.基于题目二结果数据可视化
第一题:
1.分析:
random模块,是python标准模块(用于生成随机数)。
1.1 安装random模块,在管理员命令窗口输入下面的代码。
pip install random
1.2 导入random模块
import random
使用randint函数获取一个1到6的随机数,randint函数用于生成一个0~10的随机数(包括0和1)。
random.randint(1,6)
1.3 enumerate()函数,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
for i,j in enumerate(list):
2.实现
import random
def A():
'''建立函数,模拟掷骰子
使用my_num记录点数,并返回'''
my_num = random.randint(1,6)
return my_num
def main():
#初始化函数,定义列表,并初始化。
my_list = [0] * 6
for i in range(1,10001):#掷骰子次数
my = A()
for j in range(1,7):
if my == j:
my_list[j-1] += 1#骰子次数累加
for x,num in enumerate(my_list):#遍历列表索引值及个点数出现的次数
print('点数%s的次数:%d,频率:%.4f' % (x + 1, num, num / 10000))
#执行main()函数下的代码
if __name__ == "__main__":
main()
3.运行结果:第二题:
- 分析:
模拟掷两个骰子,那么它们的点数和为(2,12)。定义两个列表,valuex_list和key_list,并转成字典型,
myDict = dict(zip(valuex_list,key_list)),key_list用于存放点数,valuex_list用于存放出现次数。dict.items()用于遍历字典键和值。
2.实现:
import random
def A():
myNum = random.randint(1,6)
return myNum
def main():
oneList = [0] * 11
towList = list(range(2,13))
myDict = dict(zip(towList,oneList))#转为字典型
for i in range(1,10001):
myNum1 = A()
myNum2 = A()
for j in range(2,13):
if myNum1 + myNum2 == j:
myDict[j] += 1
for x,y in myDict.items():
print('点数{}的次数:{},频率:{}'.format(x, y, y / 10000))
if __name__ == '__main__':
main()
3.结果:第三题:
1.分析:
1.1导入random模块,用于生成随机数。
1.2导入matplotlib库(是python的2D绘图库),安装matplotlib同安装random模块一样。
1.3导入numpy库,NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
2.实现:
import random
import matplotlib.pyplot as plt
import numpy
#显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
def A():
A0 = random.randint(1,6)
return A0
def main():
B = []
times = 10000
for i in range(1,times+1):
A1 = A()
A2 = A()
B.append(A1+A2)
plt.hist(B, range(2, 14), normed=1, linewidth=1, rwidth=0.8)
plt.title('骰子点数统计')
x = ['2点', '3点', '4点', '5点', '6点', '7点',
'8点', '9点', '10点', '11点', '12点']
# x轴刻度替换
plt.xticks(numpy.arange(2, 13) + 0.5, x)
# 标题
# x轴标题
plt.xlabel('点数')
# y轴标题
plt.ylabel('频率')
plt.show()
if __name__ == '__main__':
main()
3.结果:我系菜鸟一枚,代码不优雅,结构不清晰,请多多指教/抱拳