在 Python 中生成随机数字有多种方法,具体取决于需求场景(如整数/浮点数、安全要求、分布类型等)。以下是全面的实现方案及代码示例:
一、基础场景:标准库 random 模块
适用于大多数非安全敏感的随机数生成需求。
- 生成随机整数
import random
# 生成 [a, b] 范围内的随机整数
random_int = random.randint(1, 100)
print(random_int) # 示例输出:57
# 生成 [0, 10) 的随机整数(类似 range 语法)
random_range = random.randrange(0, 10, 2) # 步长2(0,2,4,6,8)
print(random_range) # 示例输出:6
2. 生成随机浮点数
# 生成 [0.0, 1.0) 的浮点数
random_float = random.random()
print(random_float) # 示例输出:0.745123
# 生成 [a, b] 范围的浮点数
custom_float = random.uniform(3.5, 8.5)
print(custom_float) # 示例输出:6.782
3. 从序列中随机选择
colors = ["red", "green", "blue"]
# 选择一个元素
random_choice = random.choice(colors)
print(random_choice) # 示例输出:"green"
# 选择多个不重复元素(k 不超过序列长度)
random_sample = random.sample(colors, k=2)
print(random_sample) # 示例输出:["blue", "red"]
# 允许重复选择(k 可大于序列长度)
random_choices = random.choices(colors, k=3)
print(random_choices) # 示例输出:["red", "red", "blue"]
二、安全敏感场景:secrets 模块
适用于密码、令牌等安全关键场景(Python 3.6+)。
1. 生成加密安全随机数
import secrets
# 生成 [0, 255] 的随机整数(适合字节生成)
secure_byte = secrets.randbelow(256)
print(secure_byte) # 示例输出:189
# 生成指定范围的随机整数([a, b))
secure_int = secrets.randbelow(100) # 0 ≤ n < 100
print(secure_int) # 示例输出:42
# 生成随机令牌(十六进制格式)
token = secrets.token_hex(16) # 32位十六进制字符串
print(token) # 示例输出:c5f8d...(省略)
三、科学计算场景:numpy 高性能生成
适用于大规模数据生成或特定分布需求。
1. 安装 numpy
pip install numpy
2. 生成随机数数组
import numpy as np
# 生成均匀分布的浮点数数组(范围 [0.0, 1.0))
uniform_array = np.random.rand(3, 2) # 3行2列
print(uniform_array)
# 输出示例:
# [[0.548 0.712]
# [0.123 0.456]
# [0.891 0.234]]
# 生成正态分布的数组(均值0,标准差1)
normal_array = np.random.randn(5) # 5个元素
print(normal_array) # 示例输出:[1.23, -0.45, ...]
# 生成指定范围的整数数组
int_array = np.random.randint(10, 20, size=(2,3)) # 2行3列
print(int_array)
# 输出示例:
# [[12 15 18]
# [11 14 19]]
四、控制随机性:设置随机种子
确保随机结果可复现(调试或测试时使用)。
import random
import numpy as np
# 设置种子(所有使用相同种子的代码生成相同序列)
random.seed(42)
np.random.seed(42)
print(random.randint(1, 100)) # 始终输出 82
print(np.random.rand()) # 始终输出 0.374540