python:lec08-模拟掷骰子

本文介绍了如何使用Python模拟掷骰子,并通过matplotlib进行可视化。讲解了random模块的使用,以及zip和enumerate函数的应用。重点展示了v3.0如何用matplotlib绘制散点图,v4.0中直方图的生成,以及v5.0引入NumPy进行科学计算,包括创建和操作多维数组,以及如何利用NumPy创建随机数组并输出直方图统计结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lec08-模拟掷骰子

一、v3.0新增功能:可视化投掷两个骰子结果(matplotlib)

 

"""
版本:3.0
v1.0功能:模拟掷骰子
v2.0新增功能:模拟投掷两个骰子(zip()函数)
v3.0新增功能:可视化投掷两个骰子结果(matplotlib)
"""
import random
import matplotlib
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))
    # zip()将对应列表打包成元组,为了可修改转换成字典
    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
    print(result_list)
    # (v2.0)使用enumerate 遍历列表,获取索引与值
    # for i, result in enumerate(result_list):
    # 使用.items()遍历字典
    for i, result in roll_dict.items():
        print('点数{}投掷:{}次,频率:{}'.format(i, result, result/total_times))
    # 数据可视化
    x = range(1, total_times + 1)
    # 设置c颜色,alpha透明度
    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()

1、random 模块用于生成随机数

   常用函数:

2、zip()函数:用于将对应的元素打包成一个个元组

注意:元组中的元素是不可修改的,若要修改需要转换成字典或其他。

 

3、enumerate()函数:获取函数的索引号及其元素值。

4、matplotlib模块(matplotlib函数库

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

(1)、散点图绘制

 import matplotlib.pyplot as plt

# x,y分别是x坐标和y坐标的列表

plt.scatter(x,y)

plt.show()

绘图结果:

二、v4.0新增功能:直方图可视化结果

1、marplotlib绘制直方图

pil.his(date,bins):date:数据列表;bins:分组边界

2、注意,使用为编写命名时使用中文

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

4.0代码: 

"""
版本:4.0
v1.0功能:模拟掷骰子
v2.0新增功能:模拟投掷两个骰子(zip()函数)
v3.0新增功能:可视化投掷两个骰子结果(matplotlib)
v4.0新增功能:直方图可视化结果
"""
import random
import matplotlib
import matplotlib.pyplot as plt
# 解决中文显示问题
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 = 100000
    result_list = [0]*11
    roll_list = []
    # 循环total_times次
    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), density=1, edgecolor='black', linewidth=1)
    #设置标题
    plt.title("骰子点数统计")
    # x坐标名称
    plt.xlabel('点数')
    # y坐标名称
    plt.ylabel('频率')
    plt.show()


if __name__ == '__main__':
    main()

 

执行结果:

三、v5.0新增功能:科学计算

1、NumPy(Numeric Python):用Python实现的科学计算库

包括:(1)、强大的N维数组对象array

           (2)、成熟的科学函数库

           (3)、使用的线性代数、随机数的生成函数等

2、NumPy的才做对象是多维数组ndarray:ndarray.shape数组的维度

3、创建数值:np.array(<list>),np.arrange()...

4、改变数组形状reshape()

5、NumPython创建随机数组:

           np.random.randint(a,b,size)  创建 [a,b) 间形状为size的数组

 

   

6、NumPy基本运算:以数组为对象进行基本运算,即向量化操作

7、使用np.histogram()输出直方图的统计结果

matplotlib绘图补充

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

plt.title()设置绘图标题

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

 

"""
版本:5.0
v1.0功能:模拟掷骰子
v2.0新增功能:模拟投掷两个骰子(zip()函数)
v3.0新增功能:可视化投掷两个骰子结果(matplotlib)
v4.0新增功能:直方图可视化结果
v5.0新增功能:科学计算
"""
import numpy as np
import random
import matplotlib
import matplotlib.pyplot as plt
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


def main():
    # 总投掷次数
    total_times = 100000
    # 记录骰子结果
    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), density=1, edgecolor='black', linewidth=1, rwidth=0.5)

    tick_labels = ['2点', '3点', '4点', '5点', '6点', '7点',
                   '8点', '9点', '10点', '11点', '12点', ]
    tick_position = np.arange(2, 13) + 0.5
    plt.xticks(tick_position, tick_labels)
    plt.title("骰子点数统计")
    plt.xlabel('点数')
    plt.ylabel('频率')
    plt.show()


if __name__ == '__main__':
    main()

四、本讲小结:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值