在 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻南瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值