在了解random
库的函数前,最好先对随机种子的概念有一定的认识。
随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
摘自百度百科-随机种子
而random
库中的seed()
函数便是与随机数种子相关的一个函数:
seed()、random()
seed()
函数用来初始化随机数种子,默认值为当前系统时间。
随机数种子多为一个整数,而且相同的种子所生成的随机数序列也相同。
random()
函数用来生成一个[0, 1]之间的随机小数。
>>> from random import *
>>> seed(100) #指定种子值为100
>>> random()
0.1456692551041303
>>> random()
0.45492700451402135
>>> random()
0.7707838056590222
>>> seed(100) #重新指定种子值为100
>>> random()
0.1456692551041303
>>> random()
0.45492700451402135
>>> random()
0.7707838056590222
这个例子中我们通过seed()
函数指定了种子值为100,然后连续调用了三次random
库的random()
函数。再重新指定相同的种子值重复上面的操作,可以看出,下面生成的随机数和上面是一样的。
用seed()
方法指定种子值便于测试和同步数据,实际上很多时候都不会使用这个方法而直接使用可以产生随机值的方法。
randint()
randint(a, b)
(a<=b) 生成一个[a, b]之间的整数。
下面的例子都默认使用了from random import *
的方式导入了该模块,不会再在代码中写出...
>>> randint(1, 100)
56
>>> randint(1, 100)
65
>>> randint(1, 100)
15
getrandbits()
getrandbits(n)
生成一个n比特长度的随机整数。
这个方法可能有点模糊,所以用了较多例子展示(已省略换行符)
>>> for i in range(15):
getrandbits(2)
3 2 3 0 1 0 1 3 3 3 0 3 0 0 0
>>> for i in range(15):
getrandbits(4)
14 5 5 10 6 15 13 3 6 15 7 8 4 14 12
>>> for i in range(15):
getrandbits(16)
53609 24582 10513 56130 42502 41841 8132 11838 369 39502 25920 9673 50692 55803 37103
randrange()
randrange(a, b, s)
三个参数,前两个确定范围,最后一个确定步长。生成一个[a, b)之间的以s为步数的随机整数。
>>> randrange(1, 5, 2)
3
>>> randrange(1, 5, 2)
1
>>> randrange(1, 5, 2)
1
>>> randrange(1, 5, 2)
1
上面例子的取值只可能是1或3。
第三个参数可以省略,randrange(a, b)
,此时该函数则会返回[a, b)之间的一随机整数。(类似randint
,但范围不同,b取的是开区间)
uniform
uniform(a, b)
生成一个[a, b]间的随机小数。
>>> uniform(5, 9)
5.544250560923066
>>> uniform(5, 9)
7.3384045617521085
>>> uniform(5, 9)
7.3375537545818705
>>> uniform(5, 9)
5.444180418594738
>>> uniform(5, 9)
6.203185383252325
choice(), shuffle()
choice(s)
从序列类型中随机返回一个元素。
shuffle(s)
将序列类型中的元素随机排列,返回打乱后的序列。
>>> s = list(range(10))
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle(s)
>>> s
[9, 4, 7, 2, 5, 6, 8, 0, 3, 1]
>>> choice(s)
9
>>> choice(s)
0
>>> choice(s)
8
sample()
sample(s, k)
从序列类型中随机选择k个元素,返回这k个元素组成的列表。
>>> s = tuple(range(10))
>>> s
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> sample(s, 4)
[0, 2, 7, 9]
如有错误,欢迎指正~