Python 伪随机数:random库的使用

本文介绍了Python的random库,包括常用函数如seed(), random(), randint(), randrange(), uniform(), choice(), shuffle()和sample()等,并通过蒙特卡罗方法演示了如何使用random库计算圆周率π。通过随机生成点并判断其是否在单位圆内,随着点的数量增加,可以逼近π的真实值,展示了随机数在数学问题求解中的应用。
摘要由CSDN通过智能技术生成

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的博客
🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
🥭本文内容:Python 伪随机数:random库的使用


Python 伪随机数:random库的使用


随机数在计算机应用中十分常见,Python内置的random库主要用于产生各种分布的伪随机数序列。random库采用梅森旋转算法(Mersenne twister)生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用。

常用函数

使用random库主要目的是生成随机数,因此,只需要查阅该库的随机数生成函数,找到符合使用场景的函数使用即可。这个库提供了不同类型的随机数函数,所有函数都是基于最基本的random.random()函数扩展而来。

random库中的常用函数如下:

函数描述
seed(a=None)初始化随机数种子,默认值为当前系统时间
random()生成一个[0.0,1.0)之间的随机小数
randint(a, b)生成一个[a,b]之间的整数
getrandbits(k)生成一个k比特长度的随机整数
randrange(start,stop[, step])生成一个[start, stop)之间以step为步数的随机整数
uniform(a, b)生成一个[a, b]之间的随机小数
choice(seq)从序列类型(例如:列表)中随机返回一个元素
shuffle(seq)将序列类型中元素随机排列,返回打乱后的序列
sample(pop,k)从pop类型中随机选取k个元素,以列表类型返回

生成随机数之前可以通过seed()函数指定随机数种子,随机种子一般是一个整数,只要种子相同,每次生成的随机数序列也相同。这种情况便于测试和同步数据。


random库应用:Pi 的计算

π \pi π(圆周率)是一个无理数,即无限不循环小数。精确求解圆周率 π \pi π是几何学、物理学和很多工程学科的关键。

π \pi π的精确求解曾经是数学历史上一直难以解决的问题之一,因为 π \pi π无法用任何精确公式表示,在电子计算机出现以前, π \pi π只能通过一些近似公式的求解得到,直到1948年,人类才以人工计算方式得到 π \pi π的808位精确小数。

随着计算机的出现,数学家找到了另类求解π的另类方法:蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。

应用蒙特卡罗方法求解 π \pi π的基本步骤如下:

  • 随机向单位正方形和圆结构,抛洒大量“飞镖”点
  • 计算每个点到圆心的距离从而判断该点在圆内或者圆外
  • 用圆内的点数除以总点数就是 π \pi π/4值。

随机点数量越大,越充分覆盖整个图形,计算得到的 π \pi π值越精确。实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解 π \pi π值。

用random库计算圆周率

利用 蒙特卡罗(Monte Carlo)方法 计算圆周率 π \pi π 的值:

import random

dot = 0
dots = int(input('请输入要抛洒的飞镖数:'))

for i in range(dots):
    x, y = random.random(), random.random()
    r = (x**2 + y**2)**0.5
    if r <= 1:
        dot += 1
pi = 4 * (dot / dots)
print(f'所得圆周率为:{pi}')

随着抛洒飞镖的数量的增加,计算出的圆周率值也更加精确。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小嗷犬

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值