博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python模块分析:第1节-random模块
阅读量:5738 次
发布时间:2019-06-18

本文共 3043 字,大约阅读时间需要 10 分钟。

下一篇文章:

random是Python产生伪随机数的模块,随机种子默认为系统时钟。下面分析模块中的方法:

1、random.randint(start,stop)

这是一个产生整数随机数的函数,参数start代表最小值,参数stop代表最大值,两端的数值都可以取到;

函数算法时间复杂度为:O(1)

核心源码:

return self.randrange(a,b+1) #调用randrange函数来处理

实例:

import randomfor i in range(20):    print(random.randint(0,10),end=' ')

结果:

1 1 7 5 10 1 4 1 0 8 7 7 2 10 6 8 6 0 3 1

2、random.randrange(start,stop,step)

也是一个随机整数函数,参数可选

  • 只有一个参数时,默认随机范围是0到该参数,前闭后开;
  • 两个参数时,表示最小值和最大值,前闭后开
  • 三个参数时,表示最小值,最大值和步长,前闭后开

函数算法时间复杂度:O(1)

核心源代码:

return istart+istep*self._randbelow(n) #调用randbelow函数处理

实例:

import randomfor i in range(10):    print(random.randrange(10),end=' ') #产生0到10(不包括10)的随机数print("")for i in range(10):    print(random.randrange(5,10),end=' ') #产生5到10(不包括10)的随机数print("")for i in range(10):    print(random.randrange(5,100,5),end=' ') #产生5到100(不包括100)范围内的5倍整数的随机数

结果:

1 1 2 4 4 3 4 6 1 46 6 5 7 8 9 6 6 6 530 50 20 40 75 85 25 65 80 95

3、random.choice(seq)

一个随机选择函数,seq是一个非空的集合,在集合中随机选择了一个元素输出,元素的类型没有限制。

核心源代码:

i=self._randbelow(len(seq)) #由randbelow函数得到随机地下标return seq[i]

函数算法时间负责度:O(1)

实例:

import randomlist3=["mark","帅",18,[183,138]]for j in range(10):    print(random.choice(list3),end=' ')

代码:

mark 帅 [183, 138] 18 mark 18 mark 帅 帅 [183, 138]

4、random.random()

这个函数形成从0.0到1.0之间的任意浮点数,左闭右开,没有参数。

实例:

import randomfor j in range(5):    print(random.random(),end=' ')

运行结果:

0.357486615834809 0.5928029747238529 0.37053940107869987 0.3802224543848519 0.9741990956161711

5、random.send(n=None)

一个可以对随机数生成器进行初始化的函数,n代表随机种子;当n=None时,随机种子为系统时间,当n为其他的数据,如int,str等时,则以提供的数据作为随机种子,此时生成的随机数列固定。

实例:

import randomrandom.seed("mark")for j in range(20):#无论启动多少次程序,输出的序列不变    print(random.randint(0,10),end=' ')

结果:

4 1 10 5 6 2 8 5 5 10 7 2 9 6 2 6 0 5 10 10

6、random.getstate() 和 random.setstate(state):

getstate()函数用来记录随机数生成器的状态,setstate(state)函数用来将生成器恢复到上次记录的状态。

实例:

import randomtuple1=random.getstate()#记录生成器的状态for i in range(20):    print(random.randint(0,10),end=' ')print()random.setstate(tuple1)#传入参数回复之间的状态for i in range(20):    print(random.randint(0,10),end=' ')#两次输出的结果一致

结果:

5 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 25 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 2

7、random.shuffle(seq,random=None):

对传入的集合进行乱序操作。只能针对可变序列,如字符串、列表,对于元组等不可变序列会报错,random用来选择乱序操作的方式,如random=random。

核心源代码:

for i in reversed(range(1,len(x))):    j=randbelow(i+1)    x[i],x[j]=x[k],x[i]

函数算法的时间复杂度:O(n)

实例:

import randomlists=['mark','帅哥',18,[183,138]]print(lists)random.shuffle(lists,random=None)print(lists)

结果:

['mark', '帅哥', 18, [183, 138]]['帅哥', 18, 'mark', [183, 138]]

8、random.sample(population,k):

population参数是一个序列,如列表、元组、集合、字符串等;从集合中随机抽取k个元素形成新的序列,不会改变原有的序列。

最坏时间复杂度:O(n*n)

实例:

import randomlists=['mark','帅哥',18,[183,138]]lists2=random.sample(lists,3)print(lists)print(lists2)

结果:

['mark', '帅哥', 18, [183, 138]]['mark', [183, 138], '帅哥']

9、random.uniform(a,b)

生成参数a到b之间的浮点数的函数,如果a>b ,则生成b到a之间的浮点数。

核心源码:

return a+(b-a)*self.random()

时间复杂度:0(1)

实例:

import randomfor i in range(5):    print(random.uniform(10,1))

结果:

2.88260909565246061.52111913525484083.23974542785627944.1478797565242516.532545391009419
下一篇文章:

转载地址:http://zafzx.baihongyu.com/

你可能感兴趣的文章
上海师范大学c语言考卷答案,上海师范大学C语言期末考试标准试卷.doc
查看>>
c语言经典程序100例 - 百度,经典C语言程序100例(1-10)
查看>>
c语言中利用switch判断星期几,输入字母,判断星期几,求大神指点
查看>>
c语言中多线程的基本原理,如何用C语言实现多线程
查看>>
cof文件在C语言中怎么引入,COF文件擴展名: 它是什麼以及如何打開它?
查看>>
android imageview旋转动画,Android UI之ImageView实现图片旋转和缩放
查看>>
android屏幕录制功能,Android利用ADB进行屏幕录制
查看>>
gt240m x86 android,国产平板福音!INTEL ATOM x86_64位Xposed框架,Android5.1(lolipop)适用...
查看>>
android7.1自带壁纸,RK3399 Android7.1 修改壁纸
查看>>
android系统文件重命名文件格式,重命名下载后的文件系统文件中的PhoneGap的Android...
查看>>
Android设备参数,android获得设备的参数
查看>>
手机怎么改android版本号,安卓手机build.prop每行的意思,如果想改版本信息型号等...
查看>>
原生html怎么使用vue,vue教程(一)-html使用vue
查看>>
android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
查看>>
在html标签外写的div,包含div以外的文件,即使HTML代码中的内部标签
查看>>
html文件中top什么意思,margin-top在html中的意思是什么
查看>>
html 报告模板,HttpRunner 实现 Jinja2 自定义报告模板
查看>>
人生与算法
查看>>
软件系统架构师成长之路(一)
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>