在 Python 中生成随机数字有多种方法,具体取决于需求场景(如整数/浮点数、安全要求、分布类型等)

在 Python 中生成随机数字有多种方法,具体取决于需求场景(如整数/浮点数、安全要求、分布类型等)。以下是全面的实现方案及代码示例:

一、基础场景:标准库 random 模块
适用于大多数非安全敏感的随机数生成需求。

  1. 生成随机整数
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

你可能感兴趣的:(python,python,安全,开发语言)