首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python3中常用模块-random模块

random是Python中与随机数相关的模块,其本质就是一个伪随机数生成器,我们可以利用random模块基础生成各种不同的随机数,以及一些基于随机数的操作。

1:获取模块帮助文档

# encoding=gbkimport random print(random.__doc__) print(dir(random)) for item in dir(random): print(item) print(help(random.random))print(help(random.randrange))print(help(random.randint))

2:random模块方法

2.1 基本方法

 2.1.1:设置随机种子:  random.seed(a=None, version=2)

初始化随机数生成器。如果未提供a或者a=None,则使用系统时间为种子。如果a是一个整数,则作为新的种子。如果a的值一样,每次运行的产生的随机数都是一样的。

import random random.seed(100)print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,10000)) """每次运行,产生的值都是一样的"""

2.1.2:获取及设置生成器的内部状态

获取状态:

state = random.getstate()

设置状态:

random.setstate(state)

这个有什么用呢?在状态一样的情况下,生成的随机数是一样的,如下例子:

import random # 保存内部状态state = random.getstate() print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,10000))print(random.randint(1,10000)) print('*'*20)# 重置内部状态,后面产生的随机数将会与保存state状态的地方产生的随机数一样(当然是随机范围一样的情况下)random.setstate(state)print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,1000))print(random.randint(1,10000))print(random.randint(1,10000)) """输出:32972467424964437********************32972467424964437"""

2.2 随机整数

import random # 返回一个不大于K位的Python整数(十进制),比如k=10,则结果是0~2^10之间的整数。k = 10print(random.getrandbits(k)) # random.randrange(start, stop[, step])print(random.randrange(10)) # [0,10),0---9 print(random.randrange(1, 10,2)) # [1,10) ,1---9 中的奇数 # random.randint(a, b)print(random.randint(1, 10)) # [1,10] 1---10 之间的整数

2.3 随机浮点数

import random# [0, 1)print(random.random()) # uniform(a, b):[a, b) or [a, b] depending on rounding; 四舍五入print(random.uniform(10.25,100.25))

2.4 从序列中随机获取元素

import random # 1:# 从非空序列seq中随机选取一个元素。如果seq为空则弹出IndexError异常。# choice(seq) seq = [1,2,3,4,5,6,7,8,11]print(random.choice(seq)) # 2:# 3.6版本新增。从population集群中随机抽取K次元素。weights是相对权重列表(即可以转换为概率),cum_weights是累计权重,两个参数不能同时存在。# choices(population, weights=None, *, cum_weights=None, k=1)a = [1,2,3,4,5]# 在a中取5次元素,每次都从原序列中取,print(random.choices(a,k=5)) # 在a中取5次元素,每次都从原序列中取,并按照相对权重来取(可以理解按照概率(权重/累计权重)来取),下面输出中:第三个元素的概率是100%print(random.choices(a,weights=[0,0,1,0,0],k=5))# 在a中取5次元素,每次都从原序列中取,并按照相对权重来取(可以理解按照概率来取);下面输出中,每个元素取到的概率都是一样的print(random.choices(a,weights=[1,1,1,1,1],k=5))# cum_weights是累计权重,如:weights=[1,2,3,4,5] 对应的cum_weights为cum_weights=[1,3,6,10,15],# 那么 cum_weights=[1,1,1,1,1] 对应的weights为: weights=[1,0,0,0,0],即第一元素取到的概率为100%print(random.choices(a,cum_weights=[1,1,1,1,1],k=5)) """结果:[3, 4, 2, 2, 3] --- 随机的[3, 3, 3, 3, 3] --- 每次都是3[5, 4, 4, 4, 5] --- 随机的[1, 1, 1, 1, 1] --- 每次都是1""" # 3:# 从population样本或集合中随机抽取K个不重复的元素形成新的序列。常用于不重复的随机抽样。返回的是一个新的序列,不会破坏原有序列。比如从一个整数区间随机抽取一定数量的整数random.sample(range(10000000), k=60),这非常有效和节省空间。如果k大于population的长度,则弹出ValueError异常。a = [1,2,3,4,5]# 在a中取3次元素,上次取完之后,下次在剩下的元素中取;(注意与random.choices的区别:random.choices是取一次之后,还会在原序列所有元素中取)# sample(population, k) print(random.sample(a, 3)) # [4, 5, 1] 随机的 # 4:# 随机打乱序列x内元素的排列顺序,俗称“洗牌”。只能用于可变的序列,对于不可变序列。# shuffle(x, random=None)a = [1,2,3,4,5]# 把a的顺序打乱random.shuffle(a) # 返回值为Noneprint(a) # 随机的

3:生成随机字符串

# encoding=gbkimport random, string # string 模块中:# ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'# ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'# ascii_letters = ascii_lowercase + ascii_uppercase# digits = '0123456789'# hexdigits = digits + 'abcdef' + 'ABCDEF'# octdigits = '01234567'# punctuation = r"""!"#$%&'()*+,-./:;?@[\]^_`{|}~""" # 1:最少4位# 2:最少包括一位大写字母,小写字母,数字。def verificationCode(length): if length < 4: length = 4 result = '' one_lower = [random.choice(string.ascii_lowercase)] one_upper = [random.choice(string.ascii_uppercase)] one_numeric = [random.choice(string.digits)] all_chars = one_lower all_chars += one_upper all_chars += one_numeric length = length - 3 all_chars += [random.choice(string.ascii_letters + string.digits) for i in range(length)] # 洗牌,打乱顺序 random.shuffle(all_chars) # 生成最终字符串 result = ''.join([i for i in all_chars]) return result # 1:最少8位# 2:最少包括一位大写字母,小写字母,数字,特殊字符。def genRandomString(length): if length < 8: length = 8 result = '' one_lower = [random.choice(string.ascii_lowercase)] one_upper = [random.choice(string.ascii_uppercase)] one_numeric = [random.choice(string.digits)] one_punctuation = [random.choice(string.punctuation)] all_chars = one_lower all_chars += one_upper all_chars += one_numeric all_chars += one_punctuation length = length - 4 all_chars += [random.choice(string.ascii_letters + string.digits + string.punctuation) for i in range(length)] # 洗牌,打乱顺序 random.shuffle(all_chars) # 生成最终字符串 result = ''.join([i for i in all_chars]) return result if __name__ == '__main__': print(verificationCode(4)) print(genRandomString(8))

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200805A0403400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券