文章目录
random库
random库概述
随机数在计算机应用中十分常见,Python内置的random库主要用于产生各种分布的伪随机数序列。random库采用梅森旋转算法(Mersenne twister)生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用。
使用random库主要目的是生成随机数,因此,读者只需要查阅该库的随机数生成函数,找到符合使用场景的函数使用即可。这个库提供了不同类型的随机数函数,所有函数都是基于最基本的random.random()函数扩展而来。
random库解析
函数 | 描述 |
seed(a=None) | 初始化随机数种子,默认值为当前系统时间 |
random() | 生成一个[0.0, 1.0)之间的随机小数,不包括1.0 |
randint(a, b) | 生成一个[a,b]之间的整数,包括起止点 |
getrandbits(k) | 生成一个k比特长度的随机整数 |
randrange(start, stop[, step]) | 生成一个[start, stop)之间以step为步数的随机整数 |
uniform(a, b) | 生成一个[a, b]之间的随机小数 |
choice(seq) | 从序列类型(例如:列表)中随机返回一个元素 |
shuffle(seq) | 将序列类型中元素随机排列,返回打乱后的序列 |
sample(pop, k) | 从pop类型中随机选取k个元素,以列表类型返回 |
对random库的引用方法与math库一样,采用下面两种方式实现:
import random 或 from random import *
实例:
>>>from random import *
>>>random() #生成一个[0.0, 1.0)之间的随机小数
0.2922089114412476
>>>uniform(1,10) #生成一个[a, b]之间的随机小数
1.5913082783598524
>>>uniform(1,20) #生成一个[a, b]之间的随机小数
7
>>>randrange (0,100,4) #从0开始到100以4递增的元素中随机返回
96
>>>choice(range(100)) #从序列类型(例如:列表)中随机返回一个元素
97
>>>ls = list(range(10))
>>>print(ls)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>shuffle(ls) #将序列类型中元素随机排列,返回打乱后的序列
>>>print(ls)
[5,8,4,7,6,9,3,0,2,10, 1, 2, 3, 4, 5, 6, 7,8, 9]
随机密码生成
描述
补充编程模板中代码,完成如下功能:
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。
输入输出示例
代码
输入 输出 示例 1 3 634
524
926
import random def genpwd(length): pwd = random.randint(10**(length-1), 10**length) return pwd length = eval(input()) random.seed(17) for i in range(3): print(genpwd(length))
生成随机数之前可以通过seed()函数指定随机数种子,随机种子一般是一个整数,只要种子相同,每次生成的随机数序列也相同。这种情况便于测试和同步数据
>>>seed(125) # 随机种子赋值125
>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))
'4.4.10'
>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))
'5.10.3'
>>>seed(125) # 再次给随机种子赋值125
>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))
'4.4.10'
由上述语句可以看出,在设定相同的种子后,每次调用随机函数生成的随机数是相同的。这是随机数种子的作用,也是伪随机序列的应用之一。