Python模块之random模块

发布时间 2024-01-02 16:28:11作者: Lea4ning

random模块

【一】概要

  • random 模块是 Python 标准库中提供的用于生成伪随机数的模块。在计算机中,真正的随机数是很难获得的,通常使用伪随机数来模拟随机性。random 模块提供了一系列函数,用于生成不同分布的伪随机数。

  • 由于是伪随机数生成器,使用相同的种子(seed)可以复现相同的随机序列,可以使用 random.seed() 来设置随机数生成的种子。

【二】常见用法

  • random.random()
    • 不可以传参限制区间
    • 随机生成一个大于0小于1之间的浮点数
  • random.uniform(a,b)
    • 需要传参限制区间
    • 包含a,不含b
    • 随机生成一个指定区间内的浮点数
  • random.randint(a.b)
    • 需要传参限制区间
    • 包含a,包含b
    • 随机生成区间内的一个整数
  • random.randrange(start,stop,step)
    • step默认为1
      • 当step不填时,与randint类似
    • 随机生成区间内的一个整数,可以通过设置步长取奇数或偶数等
  • random.choice(seq)
    • seq是序列类型的数据,如列表(list)、元组(tuple)、字符串(string)等
    • 随机从序列中返回一个数据
  • random.choices(population,k)
    • population:表示待抽样的总体(population)或序列(可迭代对象),可以是列表、元组、集合等序列类型的数据。
    • k :表示希望抽样的元素个数,即要从 population 中随机选择的元素数量。
    • k 可以大于 population 的长度,如果大于,抽样时可能会重复选择相同的元素。
  • random.sample(population,k)
    • population:表示待抽样的总体(population)或序列(可迭代对象),可以是列表、元组、集合等序列类型的数据。
    • k :表示希望抽样的元素个数,即要从 population 中随机选择的元素数量。
    • 从数据中随机返回k个数据
      • population 中随机抽取 k 个不重复的元素,返回一个新的列表。如果 k 小于 0 或者大于 population 的长度,会引发 ValueError 异常。
  • random.shuffle(x)
    • x :待打乱顺序的可变序列,如列表
    • 打乱顺序,改变的是原值

【三】详解

random.random

# 随机0到1之间的浮点数
res = random.random()
print(res)
# 0.25487464336119536

random.uniform

# 随机区间内的浮点数
res = random.uniform(1, 2)
print(res)
# 1.7494757593068218

random.randint

# 随机区间内的整数
res = random.randint(1, 5)
print(res)
# 3

random.randrange

# 随机1,5,9中的数字
# 区间是1-10,步长为4,所以只有1,5,9
res = random.randrange(1, 10, 4)
print(res)
# 5

random.choice

# 随机返回序列中的数据
res = random.choice(seq=[1, 2, 3])
print(res)
# 1

res = random.choice(seq=[1, 2, 3, ('tuple',), ['list']])
print(res)
# ('tuple',)

random.choices

# 在序列中随机返回4个数据
res = random.choices([1, 2, 3], k=4)
print(res)
# [3, 2, 3, 1]

random.sample

# 随机返回序列中的2个数据,数量不能大于len(序列),不能小于等于0
res = random.sample([1, 2, 3], 2)
print(res)
# [1, 2]

random.shuffle

# 打乱可变序列,如列表的顺序
list1 = [1, 2, 3]
res = random.shuffle(list1)
print(res)  # None   # 在原值上修改,没有返回值
print(list1)   # [3, 1, 2]

【四】小练习

【1】生成随机数字验证码

import random


### 【1】生成随机数字验证码
def random_int(n):
    # 随机生成n个数字
    code = ''
    # 只有字符串可以拼接,如果是数字就是加法了
    for i in range(n):
        number = random.randomint(0,9)
        # 强转字符类型
        number = str(number)
        code += number
    return code


print(random_int(4))
# 3243
def random_int(n):
    # 随机生成n个数字
    number_list = random.choices(range(0, 9), k=n)
    # 使用join方法
    txt = ''.join([str(i) for i in number_list])
    return txt


print(random_int(4))

【2】生成随机数字+字母验证码

import random

def random_num_words(n):
    code = ''
    for i in range(n):
        temp = random.choice([str(random.randint(0, 9)),  # 数字 0-9
                              chr(random.randint(65, 90)),  # 大写字母 A-Z 
                              chr(random.randint(97, 122))])  # 小写字母 a-z
        code += temp
    return code


print(random_num_words(4))
# j30W

【3】生成随机订单号

订单号生成规则

  • 订单号生成规则通常是根据业务需求和系统设计来定义的,以下是一些常见的订单号生成规则的考虑因素:
    1. 唯一性:
      • 确保每个订单都有唯一的标识,以防止重复或冲突。
    2. 时间戳:
      • 使用时间戳作为订单号的一部分,以确保订单号的唯一性,并且可以根据时间轻松识别订单的生成顺序。
    3. 业务标识:
      • 根据业务需求添加业务标识,例如产品类型、地区等,以便在订单号中包含更多信息。
    4. 随机数:
      • 添加随机数部分,使订单号更难以预测和重现。
    5. 长度限制:
      • 确保订单号的长度在可接受范围内,不要太短或太长,以方便存储和处理。
    6. 可读性:
      • 如果需要,可以使订单号具有一定的可读性,例如包含字母、数字和特定字符的组合。
    7. 前缀/后缀:
      • 可以添加前缀或后缀以区分不同类型的订单,例如区分正常订单和退货订单。
    8. 保留位数:
      • 如果需要,可以规定订单号的某些位数表示特定的信息,例如表示订单来源、支付方式等。
    9. 版本控制:
      • 考虑到系统升级或变更订单规则的可能性,可以在订单号中包含版本信息。
    10. 保留未使用号码:
      • 考虑到系统可能存在一些未使用的订单号,可以规定一些规则来处理这些未使用的号码。
    11. 规则适应性:
      • 确保订单生成规则具有一定的适应性,能够应对业务需求的变化。

生成订单号

### 【3】生成随机订单号
import random
import time


# SF + 时间戳年月日 + 随机4位数字
def order_num():
    # SF
    code = 'SF'
    # 时间戳
    timestamp = time.strftime("%Y%m%d%H%M%S")
    # 随机4位数字
    number_list = random.choices(range(0, 9), k=4)
    random_num = ''.join([str(i) for i in number_list])
    # 拼接在一起
    order_id = ''.join([code, timestamp, random_num])
    return order_id


print(order_num())
# SF202401021623060503