(课程相关的所有资料代码,已上传至CSDN,请自行下载
https://download.csdn.net/download/qq_34243930/10764180 )
模拟掷骰子 1.0–1.0功能:模拟抛掷1个骰子,并输出其结果
random模块
更多random模块的方法请参考:https://docs.python.org/3/library/random.html
注意:
1、需要import random
2、调用方法
3、演示
v_1.0.1代码如下:
简单输出
"""
作者:xpt
功能:模拟掷骰子
版本:1.0
日期:26/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
"""
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()
print(roll)
# 判断所掷点数,并把其次数加1
for j in range(1, 7):
if j == roll:
result_list[j - 1] += 1
print()
print(result_list)
if __name__ == '__main__':
main()
enumerate()函数
v_1.0.2代码如下:
列表带索引输出
"""
作者:xpt
功能:模拟掷骰子
版本:1.0
日期:26/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
"""
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()
print(roll)
# 判断所掷点数,并把其次数加1
for j in range(1, 7):
if j == roll:
result_list[j - 1] += 1
print()
for i, x in enumerate(result_list):
print('点数{}的次数:{},频率:{}'.format(i+1, x, x / total_times))
if __name__ == '__main__':
main()
1000次:
• 模拟抛掷2个骰子并输出结果
模拟掷骰子 2.0–2.0功能:模拟抛掷2个骰子,并输出其结果
zip()函数
复习:
字典,https://blog.csdn.net/qq_34243930/article/details/84242598
v_2.0代码如下:
"""
作者:xpt
功能:模拟掷骰子
版本:2.0
日期:26/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
2.0功能:模拟抛掷2个骰子,并输出其结果
"""
import random
def roll_dice():
"""
模拟掷骰子
"""
roll = random.randint(1, 6)
return roll
def main():
"""
主函数
"""
total_times = 1000
# 初始化点数所掷次数列表
result_list = [0] * 11
# 初始化点数列表(两个骰子点数之和)
roll_list = range(2, 13)
roll_dict = dict(zip(roll_list, result_list))
print(roll_dict)
print()
for i in range(total_times):
roll1 = roll_dice() # 骰子1
roll2 = roll_dice() # 骰子2
# 判断所掷点数,并把其次数加1
for j in range(2, 13):
if (roll1+roll2) == j:
roll_dict[j] += 1
# 遍历的是一个字典
for i, x in roll_dict.items():
print('点数{}的次数:{},频率:{}'.format(i, x, x / total_times))
if __name__ == '__main__':
main()
• 可视化掷骰子的结果
模拟掷骰子 3.0–3.0功能:可视化抛掷2个骰子的结果
Python数据可视化-matplotlib模块
例子:https://matplotlib.org/gallery.html
等等……可以绘制很多种类型的图
关于散点图
设置颜色,c=’red’
设置透明度,alpha=0.5
举例如何绘制:x=[1,2,3],y=[6,5,8]
则绘制的点为(1,6)(2,5)(3,8)
所以需要借助list来分别存储x,y的信息
关于散点图绘制可视化抛掷2个骰子的结果
设置x轴为次数,y轴为点数之和
缺点是:只能绘制点的信息,对于统计信息没有显示
v_3.0代码如下:
"""
作者:xpt
功能:模拟掷骰子
版本:3.0
日期:28/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
2.0功能:模拟抛掷2个骰子,并输出其结果
3.0功能:可视化抛掷2个骰子的结果
"""
import random
import matplotlib.pyplot as plt # matplotlib的子模块pyplot提供了2D图表制作的基本函数
def roll_dice():
"""
模拟掷骰子
"""
roll = random.randint(1, 6)
return roll
def main():
"""
主函数
"""
total_times = 100
# 初始化点数所掷次数列表
result_list = [0] * 11
# 初始化点数列表(两个骰子点数之和)
roll_list = range(2, 13)
roll_dict = dict(zip(roll_list, result_list))
print(roll_dict)
print()
# 记录骰子1的结果
roll1_list = []
roll2_list = []
for i in range(total_times):
roll1 = roll_dice() # 骰子1
roll2 = roll_dice() # 骰子2
# 记录
roll1_list.append(roll1)
roll2_list.append(roll2)
# 判断所掷点数,并把其次数加1
for j in range(2, 13):
if (roll1+roll2) == j:
roll_dict[j] += 1
# 遍历的是一个字典
for i, x in roll_dict.items():
print('点数{}的次数:{},频率:{}'.format(i, x, x / total_times))
# 数据可视化
# 设置x轴为次数,y轴为点数之和
x = range(1, total_times+1)
plt.scatter(x, roll1_list, c='red', alpha=0.5)
plt.scatter(x, roll2_list, c='green', alpha=0.5)
plt.show()
if __name__ == '__main__':
main()
• 对抛掷的结果进行简单的数据统计和分析
模拟掷骰子 4.0–4.0功能:对结果进行简单的数据统计和分析
matplotlib直方图
关于绘制直方图:
1、data和bins也要求是list形式
举例:data=[20,7,2,15,11,0,13,7,6],bins=[0,10,20,30]
其中注意bins按照左闭右开形式
例如[0,10)有data:7,2,0,7,6共五个,[10,20)有data:15,11,13共三个,[20,30)有data:20共一个
2、直方图样式
默认为:
改变线的颜色:edgecolor=‘black’
改变线的宽度:linewidth=‘2’
数据的归一化:normed=1
(在使用直方图时,出现警告
UserWarning: The ‘normed’ kwarg is deprecated, and has been replaced by the ‘density’ kwarg.
warnings.warn("The ‘normed’ kwarg is deprecated, and has been "
意思就是把:normed 换成 density 即可解决问题)
normedargument in
plt.hist()has been changed to
density.
3、给图片加标签
plt.xticks(位置,标签) 设置x坐标的坐标点位置及标签
(需要先写出
位置tick_pos = np.arange(2,13) # 生成2~12
内容tick_labels = [‘1点’,‘2点’,‘3点’,‘4点’])
图片加标题:plt.title()
图片加x轴标签,y轴标签:
plt.xlabel()
plt.ylabel()
默认标签是英文,如果想用中文:
在最前面加上:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
以上方法演示:
复习range:
关于指定range从哪个数字开始
range(1,5)
结果为1,2,3,4,不包括5!!!
v_4.0代码如下:
"""
作者:xpt
功能:模拟掷骰子
版本:4.0
日期:29/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
2.0功能:模拟抛掷2个骰子,并输出其结果
3.0功能:可视化抛掷2个骰子的结果
4.0功能:对结果进行简单的数据统计和分析
"""
import random
import matplotlib.pyplot as plt # matplotlib的子模块pyplot提供了2D图表制作的基本函数
plt.rcParams['font.sans-serif'] = ['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() # 骰子1
roll2 = roll_dice() # 骰子2
roll_list.append(roll1 + roll2)
# 数据可视化
plt.hist(roll_list, bins=range(2, 14), density=1, edgecolor='black', linewidth='2')
plt.title('骰子点数统计')
plt.xlabel('点数')
plt.ylabel('频率')
plt.show()
if __name__ == '__main__':
main()
• 使用科学计算库简化程序
• 完善数据可视化结果
模拟掷骰子 5.0–5.0功能:使用科学计算库简化程序,完善数据可视化结果
科学计算库NumPy
更正:np.arange(2,13) # 生成2~12
注意:左闭右开
np.random.randint(a, b, size)
创建[a, b)
间形状为size的数组
其中,size可以是数字如100,可以是元组如(3,4)
np.histogram() 输出直方图的统计结果
返回值有两个:
v_5.0代码如下:
"""
作者:xpt
功能:模拟掷骰子
版本:5.0
日期:30/11/2018
1.0功能:模拟抛掷1个骰子,并输出其结果
2.0功能:模拟抛掷2个骰子,并输出其结果
3.0功能:可视化抛掷2个骰子的结果
4.0功能:对结果进行简单的数据统计和分析
5.0功能:使用科学计算库Numpy简化程序,完善数据可视化结果
"""
import matplotlib.pyplot as plt # matplotlib的子模块pyplot提供了2D图表制作的基本函数
import numpy as np
# 解决中文标签显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def main():
"""
主函数
"""
total_times = 1000
# 记录骰子结果
roll1_arr = np.random.randint(1, 7, total_times)
roll2_arr = np.random.randint(1, 7, total_times)
result_arr = roll1_arr + roll2_arr
hist, bins = np.histogram(result_arr, bins=range(2, 14))
print(hist)
print(bins)
# 数据可视化
tick_labels = ['1点', '2点', '3点', '4点', '5点', '6点',
'7点', '8点', '9点', '10点', '11点', '12点']
tick_pos = np.arange(2, 13) + 0.5 # 生成2~12 + 0.5
plt.xticks(tick_pos, tick_labels)
plt.hist(result_arr, bins=range(2, 14), density=1, edgecolor='black', linewidth='2')
plt.title('骰子点数统计')
plt.xlabel('点数')
plt.ylabel('频率')
plt.show()
if __name__ == '__main__':
main()
课后练习
• 灵活设置骰子个数,并对结果进行统计分析
• 比如3个骰子(注意点数是多少)
Next?
• 网络爬虫
• 文件操作扩展
• 数据分析基础