目录
2.1.1:设置随机种子: random.seed(a=None, version=2)
random是Python中与随机数相关的模块,其本质就是一个伪随机数生成器,我们可以利用random模块基础生成各种不同的随机数,以及一些基于随机数的操作。
1:获取模块帮助文档
# encoding=gbk
import 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))
"""
输出:
329
724
674
2496
4437
********************
329
724
674
2496
4437
"""
2.2 随机整数
import random
# 返回一个不大于K位的Python整数(十进制),比如k=10,则结果是0~2^10之间的整数。
k = 10
print(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) # 返回值为None
print(a) # 随机的
3:生成随机字符串
# encoding=gbk
import 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))
本文详细介绍了Python中random模块的功能和使用方法,包括随机数种子设置、生成随机浮点数和整数、从序列中随机选择元素,以及如何生成随机字符串。通过实例展示了如何控制随机数生成过程,适用于需要随机性的各种编程场景。
955

被折叠的 条评论
为什么被折叠?



