一、模块基础与核心功能
1. 模块导入与初始化
所有随机操作需先导入模块:
import random # 标准导入方式
import random as rd # 别名导入(推荐)
核心原理:默认基于梅森旋转算法生成伪随机数,可通过random.seed()
设置种子实现结果重现
2. 随机数生成方法
2.1 整型随机数
# 生成1-10闭区间随机整数(含10)
print(rd.randint(1, 10)) # 示例输出:7# 生成0-100步长5的随机数(0,5,10,...,100)
print(rd.randrange(0, 101, 5)) # 示例输出:45
2.2 浮点型随机数
# 生成0.0~1.0之间的浮点数
print(rd.random()) # 示例输出:0.5488135# 生成指定范围的浮点数(支持倒序范围)
print(rd.uniform(3.5, 10.0)) # 示例输出:6.782341
二、序列操作与随机选择
1. 元素选择
fruits = ['apple', 'banana', 'orange']# 单个随机选择
print(rd.choice(fruits)) # 示例输出:'banana'# 加权随机选择(权重比为1:2:3)
print(rd.choices(fruits, weights=[1,2,3], k=2)) # 示例输出:['orange', 'banana']
2. 抽样与洗牌
# 无重复抽样(类似彩票开奖)
print(rd.sample(range(100), 5)) # 示例输出:[42, 15, 73, 88, 3] # 列表原地洗牌
cards = ['A', 'K', 'Q', 'J']
rd.shuffle(cards)
print(cards) # 示例输出:['Q', 'A', 'J', 'K']
三、高级应用场景
1. 随机种子控制
rd.seed(2025) # 固定随机序列
print(rd.randint(1,100)) # 固定输出:83
print(rd.random()) # 固定输出:0.2846
应用价值:在机器学习中保证实验可复现性
2. 特殊分布生成
# 正态分布(均值100,标准差15)
print(rd.gauss(100, 15)) # 示例输出:103.782# 指数分布(lambda=0.5)
print(rd.expovariate(0.5)) # 示例输出:1.342
3. 位级随机数
# 生成128位随机数(用于低级加密)
print(rd.getrandbits(128)) # 输出:32348723948723948723984723984
四、实战开发案例
1. 抽奖系统开发
participants = ['张三', '李四', '王五', '赵六']
winner = rd.sample(participants, k=2) # 抽取2名不重复获奖者
print(f"中奖者:{', '.join(winner)}")
2. 验证码生成器
def generate_code(length=6):chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'return ''.join(rd.choices(chars, k=length))print(generate_code()) # 示例输出:'X3G9F2'
3. 蒙特卡洛模拟
import mathdef pi_estimation(n):inside = 0for _ in range(n):x, y = rd.random(), rd.random()if math.sqrt(x**2 + y**2) <= 1:inside +=1return 4 * inside / nprint(pi_estimation(1000000)) # 近似π值输出:3.141592
五、性能优化建议
1. 批量生成:使用numpy生成大型随机矩阵
import numpy as np
big_matrix = np.random.randint(0,100,(1000,1000)) # 百万级随机数生成
2. 安全随机:敏感操作使用secrets模块
import secrets
print(secrets.token_hex(16)) # 生成加密安全随机数
六、注意事项
- 种子设置:仅在需要重现结果时使用,默认采用系统时间熵源
- 浮点精度:金融计算建议使用decimal模块处理
- 线程安全:多线程环境下建议使用独立Random实例
- 密码学警告:不要用于安全敏感场景,应使用secrets模块