Python入门基础-十、案例7 模拟掷骰子 #random模块#enumerate()函数#zip()函数#Python数据可视化-matplotlib模块(散点图,直方图)#NumPy库

(课程相关的所有资料代码,已上传至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 inplt.hist()has been changed todensity.
在这里插入图片描述
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?
• 网络爬虫
• 文件操作扩展
• 数据分析基础

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏普通

谢谢打赏~普通在此谢过

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值