python之random模块

引入

什么是 random 模块

  • random 模块是 Python的内置模块

  • random 主要用来生成随机数

一、random 模块七种基本用法介绍

1.random( )

  • 只能生成大于 0 且小于 1 之间的小数 (float类型)

    import randomprint(random.random())  # 0.445551017368668print(random.random())  # 0.09191193089709782

2.uniform( )

  • 生成指定数值之间的小数 (float)

#由random.random()的扩展因为其不能指定参数。而random.uniform(1, 3)指定了一到三之间的浮点数, (注意: 返回浮点数。不包括一和三)import random​print(random.uniform(1,3))  # 1.8079224989194222print(random.uniform(1,3))  # 2.2382904648981112

3.randint( )

  • 生成指定数值之间的整数 (int类型)

import random​# 生成大于等于 2 且小于等于 5 之间的整数 (包括2,包括5, 表示的是开区间)print(random.randint(2,5))  # 3print(random.randint(2,5))  # 2print(random.randint(2,5))  # 3​

4.randrange( )

  • 生成指定数值之间的整数 (顾头不顾尾)

import random​# 生成大于等于 2 且小于 5 之间的整数(顾头不顾尾和range一样取不到5)print(random.randrange(2,5))  # 4print(random.randrange(2,5))  # 3print(random.randrange(2,5))  # 4

5.choice( )

  • 从你指定的列表里面随机取出一个值

import random​res = random.choice([1,'23',[4,5]])print(res,type(res))'''多次输出后的结果23     
1    
[4, 5]
'''

6.sample( )

  • 从你指定的列表里面随机取出你指定个数的元素组合

import random​res = random.sample([1,2,3,'23',[4,5]],2)  # 从列表里随机取出 2 个元素组合print(res,type(res))  # [[4, 5], '23'] 
(存放在一个列表里)​res = random.sample([1,2,3,'23',[4,5]],3)  # # 从列表里随机取出 3 个元素组合print(res,type(res))  # ['23', 1, 2]

7.shuffle( )

  • 将列表里面元素的顺序打乱, 相当于洗牌 (只能传入列表)

import random​item = [1,2,3,4,5]random.shuffle(item) # 随机打乱item这个列表中元素的顺序。print(item)  # [4, 5, 1, 2, 3]

二、随机生成验证码

1.储备知识

  • 小写字母 a-z 对应的十进制是 97-122

  • 大写字母 A-Z 对应的十进制是 65-90

  • chr(num) : 将传入的一个十进制转换成对应的 ASCII 码表中的一个字符

  • ord(‘A-z’) : 将传入的一个 ASCII 码中的一个字符转换成对应的十进制

2.生成指定位数的验证码, 含大小写英文和数字

import random​def auth_code(count=6):    res = ''    for i in range(count):        lower = chr(random.randint(97,122))  # 随机小写字母        upper = chr(random.randint(65,90))   # 随机大写字母        num = str(random.randint(0,9))       # 随机数字        res2 = random.choice([lower,upper,num])  # 三者之间随机取走一个        res += res2  # 字符拼接    return res​print(auth_code(6))  # tmvp60print(auth_code(6))  # Bl7h51print(auth_code(6))  # Y9xa33print(auth_code(6))  # 787zR3

3.优化版本

  • 上一个版本是字符拼接, 会重复新建内存空间, 造成一定的资源占用

  • 优化版本使用列表来接收值, 内存空间不重复申请, 再使用 join 将列表拼成字符串

import random​def auth_code(count=6):    l = []    for i in range(count):        lower = chr(random.randint(97, 122))        upper = chr(random.randint(65,90))        num = str(random.randint(0,9))        res2 = random.choice([lower,upper,num])        l.append(res2)    return "".join(l)​print(auth_code())  # 6O22ylprint(auth_code())  # g24X4uprint(auth_code())  # 0V220Pprint(auth_code())  # 9sgnO8