Bootstrap

python中random模块的使用

random模块是Python中用于产生随机数的标准库

其包含的函数名称及其相应的功能描述如下:

seed(x)------>初始化给定的随机数种子,默认为当前系统时间(注意:一旦随机数种子x的值固定,代码中随机产生的随机数也会固定,相同的代码不论运行多少遍运行结果都是一样的,如果想要产生不同的随机数,除了将随机数种子代码注释掉,还可以重复多次编写同一功能的代码,但这种方法耗时且麻烦)

random()------>随机产生一个[0.0,1.0)之间的小数

randint(a,b)------>随即产生一个[a,b]之间的整数

randrange(m,n,k)------>随机产生一个[m,n)之间步长为k的整数

uniform(a,b)------>随机产生一个[a,b]之间的随机小数

choice(seq)------>从序列seq中随机选择一个元素

shuffle(seq)------将序列seq中元素随机排列,返回打乱后的序列

下面详细介绍一下随机数种子的用法。

设置随机种子为10的代码(随机种子是自己随机设置的)

#导入
import random
#设置随机数的种子
random.seed(10)#10为随机定义的数
print(random.random())#随机产生一个[0.0,1.0)的数 #随机数的种子相同,这一行代码所输出的结果不论运行多少遍,结果也是一样的不会改变
print(random.random())
print('_'*60)

random.seed(10)
print(random.randint(1,100))#随机产生一个[1,100]的数
print('_'*60)

for i in range(10):
    print(random.randrange(1,10,3))#这行代码被执行了10次,每次都产生一个[1,10)步长为3的随机数,也就是从1,4,7中随机选择一个数输出
print('_'*60)

print(random.uniform(1,100))#随机产生一个[1,100]之间的小数

lst=[i for i in range(1,11)]
print(random.choice(lst))#从列表中随机选择一个数输出

random.shuffle(lst)#随机排序
print(lst)

第一次运行结果

第二次运行结果(我在最后加入了一个*的输出用于与第一次运行结果区分)

从上边的两次结果可以看出,随机种子固定,随机数运行结果固定。

下面,改变随机种子为100

注意到,我在上面的代码中使用了两个随机种子,现在改变第一个随机种子数

#导入
import random
#设置随机数的种子
random.seed(100)#10为随机定义的数
print(random.random())#随机产生一个[0.0,1.0)的数 #随机数的种子相同,这一行代码所输出的结果不论运行多少遍,结果也是一样的不会改变
print(random.random())
print('_'*60)

random.seed(10)
print(random.randint(1,100))#随机产生一个[1,100]的数
print('_'*60)

for i in range(10):
    print(random.randrange(1,10,3))#这行代码被执行了10次,每次都产生一个[1,10)步长为3的随机数,也就是从1,4,7中随机选择一个数输出
print('_'*60)

print(random.uniform(1,100))#随机产生一个[1,100]之间的小数

lst=[i for i in range(1,11)]
print(random.choice(lst))#从列表中随机选择一个数输出

random.shuffle(lst)#随机排序
print(lst)
print('*'*60)

运行结果如下:

可以看出,第二个随机数之后的随机数的结果仍然没有改变。

现在改变第二个随机数种子为100,第一个随机数种子为10

运行结果如下:

第1个随机数之后,第2个随机数之前的随机数运行结果没有改变,但第2个随机数之后的随机数运行结果改变了。

如果注释掉随机数种子代码,则每次运行结果都会不一样。

#导入
import random
#设置随机数的种子
#random.seed(10)#10为随机定义的数
print(random.random())#随机产生一个[0.0,1.0)的数 #随机数的种子相同,这一行代码所输出的结果不论运行多少遍,结果也是一样的不会改变
print(random.random())
print('_'*60)

#random.seed(100)
print(random.randint(1,100))#随机产生一个[1,100]的数
print('_'*60)

for i in range(10):
    print(random.randrange(1,10,3))#这行代码被执行了10次,每次都产生一个[1,10)步长为3的随机数,也就是从1,4,7中随机选择一个数输出
print('_'*60)

print(random.uniform(1,100))#随机产生一个[1,100]之间的小数

lst=[i for i in range(1,11)]
print(random.choice(lst))#从列表中随机选择一个数输出

random.shuffle(lst)#随机排序
print(lst)
print('*'*60)

第1次运行结果

第2次运行结果

可以看出这两次结果明显不同。

;