博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

Python random模块

Posted on 2020-04-26 11:08  面具下的戏命师  阅读(254)  评论(0编辑  收藏  举报

Python random模块简介

random模块用来生产伪随机数,random库是使用随机数的Python标准库。概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理解,或者超出了我们的理解范围。计算机不能产生真正的随机数,那么伪随机数也就被称为随机数。

random库包含两类函数,常用的有如下几个

  基本随机函数: seed(), random()

  扩展随机函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle(),sample()

基本随机函数

Python中产生随机数使用随机数种子来产生。给定一个随机数种子,就能利用梅森旋转算法产生一系列随机序列。每一个数都是随机数,只要随机种子相同,产生的随机数和数之间的关系都是确定的。随机种子确定了随机序列的产生。

seed()  初始化随机种子,默认为当前的系统时间

seed(10)  # 产生种子10对应的序列

random()  随机生成一个[0.0, 1.0]之间的小数

>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.random()
0.4288890546751146

如果不使用随机数种子,它使用的是当前系统时间,后面产生的结果是完全不可再现的。而使用随机数种子,可以将随机数再现

>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.seed(10)
>>> random.random()
0.5714025946899135

扩展随机函数

基本随机函数的功能比较单一,因此增加了一些扩展随机函数。

 1、randint()

randint函数的函数原型是randint(a,b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,a必须小于等于b。生成的随机数n :    a <= n <= b

>>> random.randint(1,3)
2
>>> random.randint(1,3)
3
>>> random.randint(1,3)
1
>>> random.randint(1,3)
1

2、uniform()

uniform函数的函数原型是uniform(a,b),用于生成一个随机浮点数。两个参数中一个是上限,一个是下限。如果 a < b,则生成的随机数范围  a <= n <= b,如果 a > b,则生成随机数范围 b <= n <= a。

>>> random.uniform(1,3)
1.6555456232441863
>>> random.uniform(1,3)
1.4999933533728007
>>> random.uniform(3,1)
1.0943661817081767
>>> random.uniform(3,1)
1.0068860149210896

3、randrange()

randrange函数的函数原型是randrange(start, stop=None, step=1)。从指定范围内,按指定步长递增的集合中,获取一个随机数。如 rangdrange(1,20,2),就是相当于[1,3,5.....19]去一个随机数。结果和random.choice(range(10, 100, 2) 等效。步长默认为1,randrange(a),意为取 0 <= n < a的任意一个整数。

>>> random.randrange(1,20,2)
3
>>> random.randrange(1,20,2)
9
>>> random.randrange(1,20)
15
>>> random.randrange(1,20)

4、randchoice()

randchoice函数的函数原型是randrange(sequence),获取一个有序序列的随机一个元素。这里的参数表示一个有序类型。列表,元组,字符串等都属于有序类型,字典、集合是无序的。

>>> import random
>>> L = [1,2,3,4,5]
>>> random.choice(L)
5
>>> random.choice(L)
1
>>> random.choice(range(1,100,2))
33

5、sample()

sample函数的函数原型是sample(sequence,k),表示从一个有序类型随机获取一个指定长度的片段。sample函数不会修改原有序列。

>>> import random
>>> L = [1,2,3,4,5]
>>> random.sample(L,2)
[4, 3]
>>> random.sample(L,3)
[1, 4, 2]
>>> L
[1, 2, 3, 4, 5]

6、shuffle()

shuffle函数的函数原型是shuffle(x, random=None),用于将一个有序序列的元素打乱。

>>> import random
>>> L = [1, 2, 3, 4, 5]
>>> random.shuffle(L)
>>> L
[4, 3, 1, 5, 2]

random模块比较常用的函数基本就这些,还有许多不常用的。如正太分布、对数正太分布、卡玛分布等等。