45 random 模块

共计 2009 个字符,预计需要花费 6 分钟才能阅读完成。

引入

1. 什么是 random 模块

  • random 模块是 Python 的内置模块
  • random 主要用来生成随机数

random 模块常见用法

1.random()

  • 只能生成大于 0 且小于 1 之间的 小数 (float 类型)
import random
print(random.random())  # 0.9449282236205908
print(random.random())  # 0.297501908739908

2.uniform()

  • 生成指定数值之间的 小数 (float)
import random
print(random.uniform(2,5))  # 3.641231407326168
print(random.uniform(2,5))  # 3.0820775843719668

3.randint()

  • 生成指定数值之间的 整数 (int 类型)
import random
⛅生成大于等于 2 且小于等于 5 之间的整数
print(random.randint(2,5))  # 4
print(random.randint(2,5))  # 2
print(random.randint(2,5))  # 5

4.randrange()

  • 生成指定数值之间的 整数 (顾头不顾尾)
import random
⛅生成大于等于 2 且小于 5 之间的整数
print(random.randrange(2,5))  # 3
print(random.randrange(2,5))  # 2
print(random.randrange(2,5))  # 3

5.choice()

  • 从你指定的 列表里 面随机取出一个值
import random
res = random.choice([1,'23',[4,5]])
print(res,type(res))
''' 多次输出后的结果
23     <class 'str'>
1      <class 'int'>
[4, 5] <class 'list'>
'''

6.sample()

  • 从你指定的列表里面随机取出你指定个数的元素组合
import random
res = random.sample([1,2,3,'23',[4,5]],2)  # 从列表里随机取出 2 个元素组合
print(res,type(res))  # [3, 2] <class 'list'>  (存放在一个列表里)
res = random.sample([1,2,3,'23',[4,5]],3)  # # 从列表里随机取出 3 个元素组合
print(res,type(res))  # ['23', [4, 5], 2] <class 'list'>

7.shuffle()

  • 将列表里面元素的 顺序打乱, 相当于洗牌 (只能传入列表)
import random
item = [1,2,3,4,5]
random.shuffle(item)
print(item)  # [4, 1, 3, 5, 2]

随机生成码实现

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))  # Fr58Vg
print(auth_code(6))  # v0IOY8
print(auth_code(6))  # I9Z2gf
print(auth_code(6))  # J9128t

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())  # MSlAum
print(auth_code())  # J954pz
print(auth_code())  # Y9z9Mz
print(auth_code())  # 5QQJo4
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容