一Python的random模块介绍
Python中的random模块用于生成随机数.
几乎所有模块函数都依赖于基本函数 random()
,它在半开放区间 [0.0,1.0) 内均匀生成随机浮点数。 Python 使用 Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 2**19937-1 ,其在 C 中的底层实现既快又线程安全。 Mersenne Twister 是现存最广泛测试的随机数发生器之一。 但是,因为完全确定性,它不适用于所有目的,并且完全不适合加密目的。
这个模块提供的函数实际上是 random.Random
类的隐藏实例的绑定方法。 你可以实例化自己的 Random
类实例以获取不共享状态的生成器。
方法 | 方法概述 |
---|---|
random.random() | 用于生成一个0到1的 [0,1.0),不包含1 |
random.uniform(a,b) | 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限 可以是a > b,也可以是a < b |
random.randint(a, b) | 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b |
random.randrange([start], stop[, step]) | 从指定范围内,按指定基数递增的集合中 获取一个随机数 |
random.choice(sequence) | random.choice从序列中获取一个随机元素 |
random.shuffle(x[, random]) | 用于将一个列表中的元素打乱,即将列表内的元素随机排列 |
random.sample(sequence, k) | 从指定序列中随机获取指定长度的片断并随机排列 |
1.1 random.random()
用于生成一个0到1的 [0,1.0),不包含1
>>> print(random.random())
0.5714025946899135
>>> print(random.random())
0.4288890546751146
>>> print(random.random())
0.5780913011344704
>>>
1.2 random.uniform(a,b)
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限
可以是a > b,也可以是a < b
>>> print(random.uniform(1,10))
2.8548840892555156
>>> print(random.uniform(100,10))
26.8010873778412
>>>
>>> print(random.uniform(10,10))
10.0
>>>
>>> print(random.uniform(0.001,1))
0.6538190613672746
>>> print(random.uniform(0.001,1))
0.16106932696230084
>>>
1.3 random.randint(a, b)
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
>>> print(random.randint(0.001,1))
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\random.py", line 220, in randint
return self.randrange(a, b+1)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\random.py", line 184, in randrange
raise ValueError("non-integer arg 1 for randrange()")
ValueError: non-integer arg 1 for randrange()
>>>
>>> print(random.randint(0,1))
1
>>> print(random.randint(0,100))
41
>>> print(random.randint(1000,100))
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\random.py", line 220, in randint
return self.randrange(a, b+1)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\random.py", line 198, in randrange
raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
ValueError: empty range for randrange() (1000,101, -899)
>>>
1.4 random.randrange([start], stop[, step])
从指定范围内,按指定基数递增的集合中 获取一个随机数
>>> print(random.randrange(1,10,2))
1
>>> print(random.randrange(1,10,2))
3
>>> print(random.randrange(1,10,2))
5
>>> print(random.randrange(1,10,2))
1
>>> print(random.randrange(1,10,2))
7
>>> print(random.randrange(1,10,2))
3
>>> print(random.randrange(1,10,2))
9
>>>
1.5 random.choice(sequence)
random.choice从序列中获取一个随机元素
>>> print(random.choice(['Oracle','MySQL','SQL Server','Postgresql']))
SQL Server
>>> print(random.choice(['Oracle','MySQL','SQL Server','Postgresql']))
SQL Server
>>> print(random.choice(['Oracle','MySQL','SQL Server','Postgresql']))
Postgresql
1.6 random.shuffle(x[, random])
用于将一个列表中的元素打乱,即将列表内的元素随机排列
>>> db = ['Oracle','MySQL','SQL Server','Postgresql']
>>> random.shuffle(db)
>>> print(db)
['Oracle', 'Postgresql', 'SQL Server', 'MySQL']
>>>
1.7 random.sample(sequence, k)
从指定序列中随机获取指定长度的片断并随机排列
>>> import random
>>> db = ['Oracle','MySQL','SQL Server','Postgresql']
>>> print(random.sample(db,4))
['SQL Server', 'Oracle', 'MySQL', 'Postgresql']
>>> print(random.sample(db,3))
['Postgresql', 'SQL Server', 'MySQL']
>>> print(random.sample(db,2))
['Oracle', 'SQL Server']
>>>
>>> print(random.sample(db,1))
['Oracle']
>>>
>>> print(db)
['Oracle', 'MySQL', 'SQL Server', 'Postgresql']
>>>
参考
1.https://docs.python.org/zh-cn/3.6/library/random.html
2.https://www.cnblogs.com/liangmingshen/p/8909376.htm