声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
4.4 random模块
random模块是python的标准库之一,用于生成随机数。
计算机无法产生真正的随机数,但可以产生伪随机数。伪随机数是采用梅森旋转算法生成的。
random模块包括两类函数,常用的共有8个:
- 基本随机函数:seed(),random();
- 扩展随机函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()。
4.4.1 基本随机函数
两个基本随机函数的使用如下:
# random():生成一个[0.0, 1.0)之间的随机小数
import random
print(random.random())# seed(a):在生成随机数前可以初始化随机数种子;a是一个数字,当a=None时默认取当前系统时间;只要a是相同的,初始化的随机数种子就是相同的,然后调用random()产生的随机数就是相同的。如下:
import randomrandom.seed(10)
print(random.random())random.seed(10)
print(random.random())random.seed(10)
print(random.random())
# 由于每次产生随机数前使用了相同的随机数种子,因此三个语句打印的随机数完全相同都是0.5714025946899135
# 利用随机数种子的这种机制可以很方便地记录并复现一些随机的计算过程
4.4.2 扩展随机函数
6个常用的扩展随机函数及其使用,如下:
import random# randint(a, b):生成一个[a,b]之间的整数
ran1 = random.randint(1,20) # 产生指定范围内的随机整数,含两个端点值# randrange(m, n, k):生成一个[m,n)之间的随机整数,以k为步长
print(random.randrange(1, 20, 2)) # 多次执行得到的都是奇数,因为设置的步长为2,产生的随机数与1的差都是步长2的整数倍# getrandbits(k):生成一个k bit长的随机整数
print(random.getrandbits(3)) # 设置bit位为3,则输出的整数值都在[0,7]范围内# uniform(a, b):生成一个[a,b]之间的随机小数
ran1 = random.uniform(1,20) # 包含两个端点的值# choice(seq):从序列seq中随机选择一个元素,这个seq只要是序列类型都是可以的(字符串也可以)
ls = ['A', 'E', 'I', 'O']
print(random.choice(ls)) # 随机选取指定列表中的元素# shuffle(seq):将序列seq中的元素随机排列,返回打乱后的序列,这个seq只要是序列类型都是可以的(字符串是不可变数据类型,所以不可以用在这里)
ls = ['A', 'E', 'I', 'O']
random.shuffle(ls)
print(ls) # shuffle(seq)是直接修改了原序列,而不是产生新序列
使用random可以很方便地模拟一些依赖随机过程的算法,如蒙特卡洛算法。