昨天刷题的时候遇到了两道取随机数的题,一时没有想起来random模块的具体用法,今天整理一下。
import random
random.random():
生成一个介于0和1之间(半开区间:[0.0,1.0) )的浮点数 参数为空
random模块下的其他随机数生成函数都是基于此函数
random.randrnge(start,end,step):
基数按照步幅不断递增,在一个区间内符合条件的数的集合,从集合中随机抽取一个值,参数为,start:基数,end:最大值/最小 值,step:步幅
random.randint(a,b):
生成一个处于区间 [a,b] 的随机整数
randrange()和randint() 都是取整数的函数,参数也要求是整数
random.uniform(a,b):
生成一个指定范围内 [a,b] 的随机浮点数
random.choice(sequence):
从一个序列中随机抽取一个元素,序列包括:list,tuple,str等
random模块还有更多函数 https://docs.python.org/3/library/random.html
写了random这几个常用的随机函数,不免想探究一下random的生成原理;
随机数的真伪:
真正的随机数,是物理中量子力学的概念,我们所谓随机数闭并不是指这种,而是指统计意义上的随机。大部分程序和语言中的随机数,确实都只是伪随机。是由可确定的函数,通过一个种子产生的。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息。但如果我们的种子是一个不可预知的数的话,比如说时间就是一个时刻在变的数据,这可以达到我们作为种子的使用了。
随机数的生成算法:
随机数生成方法好坏的判断和这里就不去探究了,探讨一下几个方法。
线性同余法(LCG):
一种伪随机序列生成器算法,能产生具有不连续计算的伪随机序列的分段线性方程。由循环关系定义:
X是伪随机序列;m(0 对参数m和a的取值非常敏感,比如a=1=c,将会产生一个简单的m进制计数器,他显然是具有周期性的。 常见的参数有:1、m为质数,c=0;2、m为2^n,c=0;3、c不等于0