python的random模块

昨天刷题的时候遇到了两道取随机数的题,一时没有想起来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] 的随机浮点数

      python的random模块_第1张图片

random.choice(sequence):

      从一个序列中随机抽取一个元素,序列包括:list,tuple,str等

      

random模块还有更多函数 https://docs.python.org/3/library/random.html

 

写了random这几个常用的随机函数,不免想探究一下random的生成原理;

随机数的真伪:

   真正的随机数,是物理中量子力学的概念,我们所谓随机数闭并不是指这种,而是指统计意义上的随机。大部分程序和语言中的随机数,确实都只是伪随机。是由可确定的函数,通过一个种子产生的。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息。但如果我们的种子是一个不可预知的数的话,比如说时间就是一个时刻在变的数据,这可以达到我们作为种子的使用了。

随机数的生成算法:

  • 线性同余法
  • 平方取中方法
  • 梅森旋转随机生成法
  • BOX-MULLER法

随机数生成方法好坏的判断和这里就不去探究了,探讨一下几个方法。

线性同余法(LCG):

      一种伪随机序列生成器算法,能产生具有不连续计算的伪随机序列的分段线性方程。由循环关系定义:

                             

          X是伪随机序列;m(0

       对参数m和a的取值非常敏感,比如a=1=c,将会产生一个简单的m进制计数器,他显然是具有周期性的。

       常见的参数有:1、m为质数,c=0;2、m为2^n,c=0;3、c不等于0

 

 

 

 

                 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(python)