Python中random模块

一、概要

random模块是python标准库中用于生成伪随机数的模块。伪随机数是以随机种子和算法得到的,随机种子和算法确定后,生成的随机数序列也确定了。

二、常用函数

1、random.seed(a)

没有设置随机种子a时,默认以时间戳作为随机数,如此一来,每次输出的随机数序列都是不一样的;设置随机种子a后,每次输出的的随机数序列都是一样的。

随机种子可设置值为整数、浮点数、字符串和引用等。

import random

for i in range(3):    #未设置随机种子,以时间戳为随机种子
    print("随机数序列第一个随机数",random.randint(10,100))

print("-"*10+"分割线"+"-"*10)

for i in range(3):
    random.seed(1)    #设置随机种子为整数1
    print("随机数序列第一个随机数",random.randint(10,100))

print("-"*10+"分割线"+"-"*10)

for i in range(3):
    random.seed("a")    #设置随机种子为字符a
    print("随机数序列第一个随机数",random.randint(10,100))

'''
输出结果为:
随机数序列第一个随机数 97
随机数序列第一个随机数 44
随机数序列第一个随机数 72
----------分割线----------
随机数序列第一个随机数 27
随机数序列第一个随机数 27
随机数序列第一个随机数 27
----------分割线----------
随机数序列第一个随机数 44
随机数序列第一个随机数 44
随机数序列第一个随机数 44
'''

2、random.random()

生成一个[0,1)范围内随机浮点数。 

3、random.randint(a,b)

生成一个[a,b]范围内的随机整数。

4、random.randrange(m,n,k)

生成一个(m,n)范围内,以k为步长的随机整数。

5、random.getrandbits(n)

生成一个以n比特位长的范围内整数,即返回一个在[0,2**n)范围内的随机整数。

6、random.uniform(a,b)

生成一个[a,b]范围内的随机浮点数。

7、random.choice(seq)

从非空序列seq中随机选取一个元素输出。

8、random.shuffle(seq)

用于打乱非空序列seq中的元素顺序。

三、扩展函数

1、random.sample(seq,n)

从序列seq中获取n个不重复的元素,组成一个list并返回。

 2、random.choices(seq,weights=None,cum_weights=None,k=1)

从序列seq中随机获取n个元素,组成一个list并返回;可使用权重weights或cum_weights指定每个元素获取的概率。

seq:一个支持切片的序列,用于从中随机获取元素。

weights:可选项,为一个序列,与seq序列等长,指定seq序列中每个元素的单独权重,默认所有元素获取到的概率都相等。

cum_weights:可选项,为一个序列,与seq序列等长,指定seq序列中每个元素的累计权重,累计权重的值应从小到大;cum_weights与weights互斥,只能存在一个。

n:可选项,为整数,指定要选择的元素数量,默认为1,可大于序列长度。

import random

seq="Hello!"

print(random.choices(seq,k=2))#从序列中获取两个元素

print(random.choices(seq,k=20))#k值大于序列长度

list1=[1,1,1,1,4,40]
print(random.choices(seq,weights=list1,k=2))#指定权重,!获取概率占比40/48

list2=[2,4,6,10,100,102]
print(random.choices(seq,cum_weights=list2,k=2))#累积权重占比,值由小到大,相当于各个权重分别为weights=[2,2,2,4,90,2]

'''
结果为:
['e', '!']
['l', 'H', 'l', 'l', 'o', 'l', '!', 'H', 'e', '!']
['!', '!']
['o', 'o']
'''

3、random.randbytes(n)

随机生成n个字节的字节码。

4、random.expovariate(lambd=1.0)

指数分布。

返回一个1/lambd的数据,lambd为不等于零的自然数。

5、other

可查看random.py模块包含的所有函数功能。

Python中random模块_第1张图片

四、实例

使用random模块随机生成16位密码,密码以大写字母开头,包含大小写字母和数字。

#使用random模块随机生成16位密码,密码以大写字母开头,包含大小写字母和数字。
import random
import string

upper_litter=string.ascii_uppercase         #获取大写字母列表
lower_litter=string.ascii_lowercase         #获取小写字母列表
num=string.digits                           #获取十进制数字列表

d=random.choice(upper_litter)               #获取大写首字母

#随机生成后十五位字符每种类型的字符数量
a=random.randint(1,random.randint(1,14))
b=random.randint(1,random.randint(1,14-a))
c=15-a-b

e=random.choices(upper_litter,k=a)          #获取大写字母序列
f=random.choices(lower_litter,k=b)          #获取小写字母序列
g=random.choices(num,k=c)                   #获取数字序列

h=e+f+g                                     #拼接后十五位字符串

random.shuffle(h)                           #打乱后十五位字符串

PassWord=d+''.join(i for i in h)            #组合所有字符串,首字母大写放开头

print(PassWord)                             #打印密码

Python中random模块_第2张图片

你可能感兴趣的:(Python语法,python)