python提供random模块,使用该模块可以生成伪随机数,或根据给定的序列数据进行随机抽取
常用函数
函数 | 描述 | 范围 |
---|---|---|
seed() | 指定种子来初始化伪随机数生成器 | - |
random() | 生成一个的随机浮点数 | [0.0,1.0) |
uniform(x,y) | 生成一个在指定范围内的随机浮点数 | [x,y] |
randint(x,y) | 生成一个指定范围内的随机浮点数 | [x,y] |
randrange(x,y,step) | 指定范围内,按照step递增数据,并从里面抽取一个数据 | [x,y) |
choice(seq) | 从序列seq中抽取一个数据 | - |
shuffle(seq) | 将序列seq中随机排列(改变原序列) | - |
常用函数使用举例
应用小例—使用蒙特卡罗方法计算圆周率
思路来源:中国大学MOOC嵩天老师的课程
简介
关于蒙特卡罗方法,笔者引用百科对其的定义:使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,想要了解更多请点击:百度百科—蒙特卡罗方法
过程介绍
假设我们现在知道圆面积的计算公式,但是不知道圆周率的值,这时有一个边长为1的正方形,有一个¼圆与其内接,我们向正方形中抛点,每个点的落点位置随机,如果抛出的点足够多,那么落在¼圆中的点数x与抛出的总点数y之比就等于¼圆与正方形的面积之比
import random
import math
total_num=1000*1000 # 总点数
circle_num=0 # 落在圆中的点数
for i in range(total_num):
x,y=random.random(),random.random() # 生成坐标用来表示点的位置
dist=math.sqrt(x**2+y**2) # 计算点与原点O的距离以确定点是否在圆内
if dist<=1.0:
circle_num+=1 # 计算出圆内点数
pii=4*(circle_num/total_num) # 根据已知中的等式关系得出计算式
print(f'您得出的圆周率为:{pii}')
print('您的圆周率准确度大约为:{:.6f}'.format(pii/math.pi)) # 我们取math模块中的pi作为标准来查看得出的结果的准确度
运行结果
实际上总的点数越多,精准确度越高,读者可以自行尝试