目录
我们先来看一看random模块中有多少个方法
而此文章要讲解的方法主要有如下几个:
1.random.random()
2.random.uniform()
3.random.randrange()
4.random.randint()
5.random.choice()
6.random.shuffle()
7.random.sample()
1.random.random()
简介:
random.random()
作用:
用于生成一个0到1的随机浮点数
注意:
生成的浮点数的范围为0<= n < 1.0
源码:
def random(self):
"""Get the next random number in the range [0.0, 1.0)."""
return (int.from_bytes(_urandom(7), 'big') >> 3) * RECIP_BPF
这一句话是返回从区间[0,1)的随机浮点数
我们设计一段代码:
import random
if __name__ == '__main__':
print(random.random())
控制台输出:
2.random.uniform()
random.unifor(a, b)
作用:
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。
注意:
如果a > b,则生成的随机数n: b <= n <= a。如果 a <b, 则 a <= n <= b
源码:
def uniform(self, a, b):
"Get a random number in the range [a, b) or [a, b] depending on rounding."
return a + (b - a) * self.random()
我们发现这个方法有调用了random()方法,我们知道random()方法返回的是[0,1)的随机浮点数,那么uniform()方法,因为a不一定严格小于b,a也可能等于b,如果a=b,那么返回的就是a,又因为a也可以大于b,所以返回值范围为[a,b],为左闭右闭区间
我们设计一段代码:
import random
if __name__ == '__main__':
print(random.uniform(2,4))
控制台输出:
3.random.randrange()
简介:
random.randrange(start, stop, step)
作用:
从指定范围内,按指定基数递增的集合中获取一个随机数
注意:
该方法返回的随机值是左闭右开的,也就是取不到stop的值
举例:
random.randrange(10, 30, 2),结果相当于从[10, 12, 14, 16, ... 26, 28]序列中获取一个随机数。
查看源码:
def randrange(self, start, stop=None, step=1):
"""Choose a random item from range(start, stop[, step]).
This fixes the problem with randint() which includes the
endpoint; in Python this is usually not what you want.
"""
# This code is a bit messy to make it fast for the
# common case while still doing adequate error checking.
istart = int(start)
if istart != start:
raise ValueError("non-integer arg 1 for randrange()")
if stop is None:
if istart > 0:
return self._randbelow(istart)
raise ValueError("empty range for randrange()")
# stop argument supplied.
istop = int(stop)
if istop != stop:
raise ValueError("non-integer stop for randrange()")
width = istop - istart
if step == 1 and width > 0:
return istart + self._randbelow(width)
if step == 1:
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
# Non-unit step argument supplied.
istep = int(step)
if istep != step:
raise ValueError("non-integer step for randrange()")