文章目录
- 前言
- 一、random库介绍
- 二、常用函数
-
- random.seed(a)
- random.random()
- random.uniform(a,b)
- random.randint(a,b)
- random.randrange(start,stop,[step])
- random.getrandbits(k)
- random.choice(seq)
- random.shuffle(seq)
- random.sample(pop,k)
- 三、不常用函数
-
- random.getstate()
- random.setstate(state)
- random.betavariate(alpha, beta)
- random.expovariate(lambd)
- random.gammavariate(alpha, beta)
- random.gauss(mu, sigma)
- random.normalvariate(mu, sigma)
- random.paretovariate(alpha)
- random.weibullvariate(alpha,beta)
- 四、真实案例
-
- 随机密码字符串
- 计算圆周率
前言
一、random库介绍
- 作者介绍:Python领域优质创作者、数据开发工程师
- 励志成为Python全栈工程师,关注我发现更多精彩~
- 本文已收录于Python全栈系列专栏:100天精通Python从入门到就业
- 欢迎订阅,订阅专栏后可私聊进百人Python全栈交流群(手把手教学,问题解答); 还可领取80GPython全栈教程 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!
文章图片
文章图片
random模块实现了各种分布的伪随机数
生成器。为什么称为伪随机数:即人类使用算法等方式,以一个基准(也被叫做种子,最常用的就是时间戳)来构造一系列数字,这些数字的特性符合人们所理解的随机数。但因为是通过算法得到的,所以一旦算法和种子都确定,那么产生的随机数序列也是确定的,所以叫伪随机数。
import random
二、常用函数 random.seed(a)
设置初始化随机种子,可输出相同随机数序列;a取整数或浮点数,不设置时默认以系统时间为种子
import randomprint("没有设定种子时")
for i in range(5):
ret = random.randint(1, 10)
print(ret, end=" ")
print()print("设定种子时")
random.seed(1)
for i in range(5):
ret = random.randint(1, 10)
print(ret, end=" ")
输出结果:
文章图片
如上图可以看出:没有显式设定种子时,每次输出的随机数都是不一样的;显式设定种子时,每次输出的随机数都是一样的
random.random()
用于生成一个 0.0 到 1.0 的随机浮点数
>>> import random
>>> random.random()
0.9279749775408933
>>> random.random()
0.12720379394341363
>>> random.random()
0.9391670189485866
random.uniform(a,b)
生成一个[a,b]
之间的随机小数;a, b 取整数 或 浮点数
>>> import random
>>> random.uniform(10.0, 20.0)
10.839441969258752
>>> random.uniform(10.0, 20.0)
12.233491150445115
>>> random.uniform(10, 20)
11.290566243261305
random.randint(a,b)
生成一个[a,b]
之间的随机整数
>>> import random
>>> random.randint(10,100)
100
>>> random.randint(10,100)
83
>>> random.randint(10,100)
66
random.randrange(start,stop,[step])
生成一个随机生成1-100的整数:[start,stop)
之间以step为步数的随机整数;start,stop,step取整数,step不设时默认值为1
>>> import random
>>> random.randrange(1,100)
54
>>> random.randrange(1,100)
21
>>> random.randrange(1,100)
71
随机生成1-100的奇数:
>>> import random
>>> random.randrange(1,100,2)
37
>>> random.randrange(1,100,2)
63
>>> random.randrange(1,100,2)
29
随机生成1-100的偶数:
>>> import random
>>> random.randrange(2,100,2)
62
>>> random.randrange(2,100,2)
6
>>> random.randrange(2,100,2)
46
random.getrandbits(k)
生成一个占内存k位
以内的随机整数;k取长度的整数值
>>> import random
>>> random.getrandbits(10)
29
>>> random.getrandbits(10)
540
>>> random.getrandbits(10)
227
random.choice(seq)
从序列类型seq中随机返回一个元素;seq取序列类型:如字符串,列表,元组
>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.choice(list)
'b'
>>> random.choice(list)
'f'
>>> random.choice(list)
'g'
random.shuffle(seq)
将序列类型中元素随机排序,返回打乱后序列,seq被改变(改变原列表
),shuffle为洗牌之意; seq取序列类型:如字符串,列表,元组
>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.shuffle(list)
>>> list
['c', 'a', 'f', 'd', 'g', 'b']
>>> random.shuffle(list)
>>> list
['f', 'a', 'b', 'c', 'g', 'd']
>>> random.shuffle(list)
>>> list
['a', 'd', 'g', 'c', 'b', 'f']
random.sample(pop,k)
从pop中选取k个元素,以列表类型返回(不改变原列表
);pop取序列类型,k取整数:代表选取个数
>>> import random
>>> list = ['a', 'b', 'c', 'd', 'f', 'g']
>>> random.sample(list, 4)
['b', 'f', 'c', 'a']
>>> random.sample(list, 4)
['g', 'f', 'b', 'd']
>>> random.sample(list, 4)
['g', 'f', 'c', 'b']
三、不常用函数 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 > 0random.gauss(mu, sigma)
高斯分布:mu是平均值,sigma是标准差。random.normalvariate(mu, sigma)
正态分布:mu是平均值,sigma是标准差。random.paretovariate(alpha)
帕累托分布:alpha是形状参数。random.weibullvariate(alpha,beta)
威布尔分布:alpha是比例参数,beta是形状参数。四、真实案例 随机密码字符串
字符串包括数字和字母, 可以指定密码的位数
import random
import stringdef get_random_string(length):
# 随机生成字母和数字的位数
num_count = random.randint(1, length - 1)
letter_count = length - num_count# 随机抽样生成数字序列
num_list = [random.choice(string.digits) for _ in range(num_count)]# 随机抽样生成字母序列
letter_list = [random.choice(string.ascii_letters) for _ in range(letter_count)]# 合并字母和数字
all_list = num_list + letter_list# 乱序
random.shuffle(all_list)result = "".join([i for i in all_list])
return result# 生成10位的密码
password1 = get_random_string(10)
print(password1)
# 生成15位的密码
password2 = get_random_string(15)
print(password2)
# 生成20位的密码
password3 = get_random_string(20)
print(password3)
输出结果:
41eD76F3e1
915087432k8443z
002L5292840A07284755
计算圆周率 1)圆周率的近似计算公式:
文章图片
pi = 0
N = 100
for k in range(N):
pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / (8 * k + 5) - 1 / (8 * k + 6))
print("圆周率值是:%s" % pi)
输出结果:
圆周率值是: 3.141592653589793
2)蒙特卡洛算法:
文章图片
import randomDARTS = 1000 * 1000 * 10
hits = 0.0for i in range(1, DARTS + 1):
x, y = random.random(), random.random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits / DARTS)
print("圆周率值是:%s" % pi)
【python|100天精通Python(基础篇)——第30天(标准库random)】输出结果:
圆周率值是:3.14205
推荐阅读
- python|Python玩转图像格式转换
- Python|Python之RFM建模分析
- 大数据|实用教程详解(模型部署,用DNN模块部署YOLOv5目标检测(附源代码))
- 人工智能|一文看懂CV中的注意力机制
- python学习|matplotlib画图汉字无法显示
- python 表情包下载器,轻松下载上万个表情包、斗图不用愁
- 几大方面了解Python中的字符串
- 数学建模|第二届长三角高校数学建模竞赛
- Letcode算法专篇|Java之有序集合&hashMap