Python random 模块详解
random 模块用于 生成随机数,并提供了多种 随机抽样、洗牌、随机选择 等函数,广泛应用于 数据模拟、游戏开发、密码生成、概率计算 等场景。
1. 导入 random 模块
random 是 Python 内置模块,无需额外安装:
import random
2. 生成随机数
2.1 生成随机浮点数
| 函数 | 说明 |
|---|---|
random.random() | 生成 0 到 1 之间的随机浮点数(不包含 1) |
random.uniform(a, b) | 生成指定范围 [a, b] 之间的随机浮点数 |
示例:
print(random.random()) # 例如:0.3742(范围 0~1)
print(random.uniform(1, 10)) # 例如:5.763(范围 1~10)
2.2 生成随机整数
| 函数 | 说明 |
|---|---|
random.randint(a, b) | 生成 [a, b] 之间的随机整数(包含 b) |
random.randrange(start, stop, step) | 生成符合步长 step 的随机整数,不包含 stop |
示例:
print(random.randint(1, 10)) # 生成 1~10 之间的整数(包含 10)
print(random.randrange(1, 10, 2)) # 生成奇数:1, 3, 5, 7, 9
2.3 生成随机二进制、八进制、十六进制数
print(bin(random.randint(0, 255))) # 随机二进制数
print(oct(random.randint(0, 255))) # 随机八进制数
print(hex(random.randint(0, 255))) # 随机十六进制数
3. 随机选择
3.1 random.choice()
从序列(列表、元组、字符串)中随机选择一个元素:
colors = ["red", "blue", "green", "yellow"]
print(random.choice(colors)) # 可能输出 "green"
3.2 random.choices()
带权重的随机抽样(可重复):
items = ["apple", "banana", "cherry"]
weights = [10, 1, 1] # "apple" 出现概率更高
print(random.choices(items, weights=weights, k=5))
3.3 random.sample()
从序列中随机抽取 不重复 的 k 个元素:
numbers = list(range(1, 11))
print(random.sample(numbers, 3)) # 可能输出 [2, 7, 9]
4. 洗牌 shuffle()
将列表元素随机打乱:
cards = [1, 2, 3, 4, 5]
random.shuffle(cards)
print(cards) # 可能输出 [3, 1, 5, 4, 2]
5. 生成随机密码
import string
def generate_password(length=8):
characters = string.ascii_letters + string.digits + string.punctuation
return ''.join(random.choices(characters, k=length))
print(generate_password(12)) # 可能输出 "X$9g@3p!LzQ"
6. 设置随机种子
使用 random.seed(n) 设定随机种子,保证结果可复现:
random.seed(42)
print(random.randint(1, 100)) # 每次运行都输出相同的值
7. 其他高级应用
7.1 模拟掷骰子
def roll_dice():
return random.randint(1, 6)
print(roll_dice()) # 可能输出 4
7.2 模拟抽奖
participants = ["Alice", "Bob", "Charlie", "David"]
winner = random.choice(participants)
print(f"中奖者是:{winner}")
7.3 生成随机颜色
def random_color():
return "#{:06x}".format(random.randint(0, 0xFFFFFF))
print(random_color()) # 可能输出 "#f2a1b3"
8. 总结
| 功能 | 代码示例 |
|---|---|
| 生成 0~1 之间的随机浮点数 | random.random() |
生成 [a, b] 范围内的浮点数 | random.uniform(a, b) |
生成 [a, b] 之间的整数 | random.randint(a, b) |
生成符合步长 step 的随机整数 | random.randrange(a, b, step) |
| 从序列中随机选取一个元素 | random.choice(seq) |
随机抽取 k 个不重复元素 | random.sample(seq, k) |
随机抽取 k 个带权重元素 | random.choices(seq, weights, k) |
| 打乱列表顺序 | random.shuffle(seq) |
| 生成随机密码 | random.choices(string.ascii_letters + string.digits, k=length) |
| 设定随机种子(结果可复现) | random.seed(n) |
random 模块是 Python 中生成随机数的核心工具,广泛用于数据分析、模拟实验、游戏开发等领域!