随机数在实际编程中使用非常普遍,数据加密、身份鉴定、电子商务等应用都要用到随机数。在Python语言中,random模块提供了随机数的创建。
使用random()函数创建随机数
random()函数在0.0至1.0之间均匀生成随机浮点数,若需要其它数值范围的随机数,可以对random()函数生成的随机浮点数进行数学运算,来获取其它数值范围的随机数。

案例1:生成一个0.0至1.0之间的随机浮点数。
>>> import random
>>> r = random.random()
>>> print(r)
0.585594459081815
>>> r = random.random()
>>> print(r)
0.4535870687364473
>>>
案例2:生成100以内的随机整数
案例代码见课程资源(unit12/case02.py)
# 导入random模块
import random
# 定义随机数生成函数
# 函数生成100以内的随机整数
def randint():
return int(random.random() * 100)
# 生成10个100以内的随机整数
for i in range(10):
print(randint(),end=" ")
函数randint()生成100以内的随机整数,函数内部使用random()函数生成0.0至1.0范围的随机浮点数,将生成的随机浮点数乘以100,并以整数形式返回结果。
生成随机整数
random模块的randrange()函数可以生成一定数值范围内的随机整数,randrange()函数有两个版本,主要是传入的参数不同。randint()函数生成一个介于传入参数a和b范围内的随机整数。
案例代码:
>>> import random
>>> random.randrange(100)
66
>>> random.randrange(100,1000)
278
>>> random.randint(101,121)
105
>>>
序列对象的随机操作
序列对象的随机操作是指通过random模块提供的函数,可以实现从序列对象中随机选取一个元素、随机打乱序列对象元素的位置、对序列对象随机抽样操作。
用于序列对象操作的函数如下表所示:
注释(2)
函数声明:
choices(
population,
weights=None,
*,
cum_weights=None,
k=1
)
函数的主要功能是从population中随机选取子表。若没有提供后面的参数,就是随机选取,若提供了后面的参数,会按照一定的概率选取。
参数weights设置相对权重,它的值是一个列表,设置之后,population每个元素被抽取到的概率就被确定了。
参数cum_weights是累加权重,Python会自动把相对权重转换为累加权重,即如果你直接给出累加权重,那么就不需要给出相对权重。
参数k为选取的元素数量。
案例代码:
>>> import random
>>> s = [10,11,16,20,9,101]
>>> #随机选取5个元素
>>> random.choices(s,k=5)
[10, 20, 11, 101, 20]
>>>#设置相对权重
>>> random.choices(s,weights=[1,0,3,0,0,6],k=5)
[10, 16, 16, 101, 101]
>>> # 随机生成权重列表
>>> w = [random.random() for v in range(6)]
>>> print(w)
[0.8036686972802367, 0.7607912706617015, 0.3240968790952292, 0.3603174352386108, 0.5089516033876703, 0.1332121436444902]
>>> random.choices(s,w,k=5)
[10, 10, 10, 11, 11]
从输出结果可以看出,设置相对权重后,对应权重高的元素选取的概率比较大。
注释(3)
函数声明:
sample(population, k)
该函数用于对序列对象population随机抽样,抽取长度为k。
函数返回来来自population元素的新列表,同时保持population不变。 结果列表按选择顺序排列,选取的是population的随机样本。
案例代码:
>>> import random
>>> data = [41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95]
>>> random.sample(data,6)
[31, 35, 73, 63, 20, 81]
>>> random.sample(data,6)
[35, 30, 50, 37, 20, 31]
>>> random.sample(data,3)
[95, 63, 29]
>>>
设置随机数种子
计算机的随机数都是伪随机数,都是以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
Python默认以系统时间作为随机种子,开发者可以重新设置随机数种子。
设置随机数种子的函数如下表所示:
注释(1)
函数声明:
seed(a=None, version=2)
函数初始化随机数生成器的种子。
参数a为要设置的随机数种子。若a 被省略或为 None,则使用当前系统时间。
参数version用于函数版本选择,默认为版本2,版本1是较旧的版本。
案例代码:
# 导入random模块
import random
# 导入time模块
import time
# 定义随机数生成函数
# 函数生成100以内的随机整数
def randint():
return int(random.random() * 100)
# 获取当前时间设置随机数种子
random.seed(time.time())
# 生成10个100以内的随机整数
for i in range(10):
print(randint(),end=" ")