目录
一、random库基本介绍
二、基本随机数函数( seed()、random() )
三、扩展随机数函数( randint()、getrandbits()、uniform()、randrange()、choice()、shuffle() )
四、“圆周率的计算”实例
4.1 公式近似计算
4.2 蒙特卡罗方法
1. random库是Python的标准库,可以用关键字 import 直接引用。random库用于产生随机数。(计算机采用梅森旋转算法生成伪随机数序列)
2. 基本随机函数:seed()、random()
3. 扩展随机函数:randint()、getrandbits()、uniform()、randrange()、choice()、shuffle()
相关概念:随机数种子。给定随机数种子——>梅森旋转算法——>随机序列(相同的随机种子,产生一模一样的随机序列)
基本随机函数 | 说明 |
---|---|
seed(a) | 功能:产生确定的初始随机种子 返回值:无 参数:a——指定的初始随机种子 说明:若a省略,则初始随机种子默认为当前系统时间。 若人工设置初始随机种子,则程序运行可复现;若省略参数,则认为程序运行不可复现 |
random() | 功能:产生随机浮点数 返回值:[0.0, 1.0)之间的随即浮点数 参数:无 说明:该函数产生的随机数一定与随机种子有关 |
扩展随机数函数 | 说明 |
---|---|
randint(a, b) | 功能:产生随机整数 返回值:[a, b)之间的随机整数 参数:a——随机数范围的下限 b——随机数范围的上限 说明: |
randrange(m, n[, k]) |
功能:产生随机整数 返回值:[m, n)之间以k为步长的随机整数 参数:m——随机数范围的下限 n——随机数范围的上限 k——随机数取值的步长 说明: |
uniform(a, b) | 功能:产生随机浮点数 返回值:[a, b]之间的随机浮点数 参数:a——随机数范围的下限 b——随机数范围的上限 说明: |
getrandbits(k) | 功能:产生随机整数 返回值:k比特长的随机整数 参数:k——随机数的长度 说明: |
choice(seq) | 功能:选择随机元素 返回值:列表seq中的随机一个元素 参数:seq——提供可供随机选择的一个元素列表 说明: |
shuffle(seq) | 功能:随机排序 返回值:序列seq的随机排列 参数:seq——提供可供随机排序的一个元素列表 说明:该函数的输出会覆盖原列表。 |
圆周率的近似计算公式:
pi = 0 # 设 π 的初始值为0
N = 100 # 定义100次循环
for k in range(N): # 套用圆周率近似计算公式
pi += 1 / pow(16, k) * ( 4 / (8*k+1) - \
2 / (8*k+4) - \
1 / (8*k+5) - \
1 / (8*k+6) )
print("圆周率近似为:{}".format(pi))
蒙特卡罗方法:
向单位正方形中随机撒点,撒点的总个数记为M,落在单位圆中点的个数记为N(N import random as r # 引用random库,用于随机撒点
import time as t # 引用time库,用于计时计算时间
stars = 10000 * 10000 # 设置撒点总数为一亿个
hits = 0 # 设置落在单位圆中点数的初始个数为零个
start = t.perf_counter() # 计算开始
for k in range(stars):
x, y = r.random(), r.random() # 随机撒点:0≤x<1,0≤y<1
if (pow(x,2) + pow(y,2)) < 1 : # 判断该次撒的点是否的单位圆中
hits += 1
pi = 4 * (hits / stars) # 近似计算圆周率
print("计算用时{}s".format(t.perf_counter() - start)) # 计算结束
print("圆周率近似为:{}".format(pi))