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