显示
显示结果:random模块实现了各种分布的伪随机数生成器。
伪随机数:人类使用算法等方式,以一个基准(也被称为种子,常用的是时间戳)来构造一系列数字,这些数字的特性符合人们所理解的随机数。
一旦算法和种子都确定,产生的随机数序列也是确定的,所以称为伪随机数。
1. 常用函数
常用函数 | 说明 |
---|---|
|
常用函数使用方法:
import random
print('no seed')
for i in range(5):
ret = random.randint(1,10)
print(ret)
print()
print(random.random())
print(random.uniform(1,10))
print(random.randint(0,10))
print(random.randrange(1,10,5))
print(random.getrandbits(2))
print(random.choice([1,3,5,7,9]))
l=[1,2,3,4]
random.shuffle(l)
print(l)
print(random.sample(l,2))
print('*'*40)
print('has seed')
random.seed(1)
for i in range(5):
ret = random.randint(1,10)
print(ret)
print(random.random())
print(random.uniform(1,10))
print(random.randint(0,10))
print(random.randrange(1,10,5))
print(random.getrandbits(2))
print(random.choice([1,3,5,7,9]))
l=[1,2,3,4]
random.shuffle(l)
print(l)
print(random.sample(l,2))
显示结果:
no seed
3
2
5
6
8
0.6944070250628032
1.0023001428048501
6
6
3
1
[3, 4, 1, 2]
[2, 3]
****************************************
has seed
3
10
2
5
2
0.49543508709194095
5.045419583098643
10
6
3
3
[3, 4, 2, 1]
[1, 4]
进程已结束,退出代码 0
2. 不常用函数
random模块中不常用的函数有如下:
函数名 | 说明 |
---|---|
random.getstate() | 捕获并返回生成器当前内部状态的对象,可以把它传递给setstate()函数来把生成器内部状态恢复到调用getstate()函数之前的状态,相当于备份 |
random.setstate(state) | state应该是getstate()函数的结果,用来把生成器当前的内部状态恢复为state |
random.betavariate(alpha,beta) | Beta分布:参数的条件是alpha>0和beta > 0,返回值的范围介于0和1之间 |
random.expovariate(lambd) | 指数分布 |
random.gammavariate(alpha,beta) | Gamma分布:参数的条件的alpha > 0 & beta < 0 |
random.gauss(mu,sigma) | 高斯分布: mu是平均值,sigma是标准差 |
random.normalvariate(mu,sigma) | 正态分布:mu是平均值,sigma是标准差 |
random.paretovariate(alpha) | 帕累托分布:alpha是形状参数 |
random.weibullvariate(alpha,beta) | 威布尔分布:alpha是比例参数,beta是形状参数 |
举例:生成随机密码
生成的密码包含数字和字母,可以指定密码的位数。
# -*- coding: utf-8 -*-
"""
@File : 随机生成密码.py
@E-Mail : zoya.zh@qq.com
"""
import random
import string
def get_random_passwd(length:int):
'''
生成随机密码h
:param length: 密码的长度
:return: 生成的随机密码
'''
num_count = random.randint(1,length-1) # 密码中数字的个数
char_count = length - num_count # 密码中字母的个数
num_list = [random.choice(string.digits) for i in range(num_count)] # 随机生成的数字
char_list = [random.choice(string.ascii_letters) for i in range(char_count)] # 随机生成的字母
psw = num_list + char_list
# 随机排列序列中的字符
random.shuffle(psw)
# 把得到的密码转成字符串的格式返回
result = ''.join(psw)
return result
if __name__ == '__main__':
psw = get_random_passwd(8)
print(psw)
测试时每次都会生成不同的密码