Python3 random 模块
random 模块用来产生"伪随机"数,让程序结果不确定,常用于游戏、模拟抽样、随机点名、生成验证码等场景。它是 Python 标准库的一部分,直接 import random 即可使用。
随机种子 seed
随机数由种子计算而来:设了相同的种子,后续产生的随机序列就完全相同,方便复现实验:
import random
random.seed(1) # 设定种子
print(random.random()) # 输出:0.13436424411240122
random.seed(1) # 重置同一种子
print(random.random()) # 输出:0.13436424411240122(序列复现)
常用函数速览
| 函数 | 作用 | 示例 |
|---|---|---|
| random() | 返回 [0.0, 1.0) 的浮点数 | random.random() |
| uniform(a, b) | 返回 [a, b] 内的浮点数 | uniform(1, 10) |
| randint(a, b) | 返回 [a, b] 内整数(含两端) | randint(1, 6) |
| randrange(a, b) | 返回 [a, b) 内整数 | randrange(0, 100) |
| choice(seq) | 从序列随机取一个元素 | choice(['红', '绿']) |
| sample(seq, k) | 不重复地取 k 个元素 | sample(range(10), 3) |
| shuffle(seq) | 原地打乱列表顺序 | shuffle(cards) |
函数使用示例
import random
print(random.random()) # 输出:0.8653...(每次不同)
print(random.uniform(1, 10)) # 输出:如 5.8321...
print(random.randint(1, 6)) # 输出:模拟掷骰子,1~6 间整数
print(random.randrange(100, 1000)) # 输出:100~999 间三位数
print(random.choice(['石头', '剪刀', '布'])) # 输出:随机一项
打乱与不重复抽样
import random
cards = ['A', '2', '3', '4']
random.shuffle(cards) # 原地打乱
print(cards) # 输出:如 ['3', 'A', '4', '2']
print(random.sample(range(1, 50), 6)) # 输出:1~49 中不重复的 6 个数
生成随机验证码
用 random.choices 允许元素重复,可拼出数字或字母数字混合的验证码:
import random
import string
# 4 位纯数字验证码
print(''.join(random.choices('0123456789', k=4)))
# 6 位字母+数字验证码(每次输出不同,如 3fKp9Z)
print(''.join(random.choices(string.ascii_letters + string.digits, k=6)))
随机抽奖示例
从候选人中抽中奖者:不重复抽用 sample,抽走即删除可结合 pop:
import random
names = ['张三', '李四', '王五', '赵六']
winners = random.sample(names, 2) # 抽 2 位不重复中奖者
print(winners) # 输出:如 ['王五', '张三']
# 洗牌后按顺序决定名次
random.shuffle(names)
print(names[0], '获得一等奖')
安全随机 secrets
random 的算法可预测,不适合做密码、令牌等安全用途;安全场景应改用 secrets 模块:
import secrets
print(secrets.token_hex(16)) # 输出:随机 32 位十六进制字符串
小结
random 模块满足日常随机需求:randint 取整数、choice/sample 取元素、shuffle 打乱、seed 复现结果;涉及安全场景一律改用 secrets。