Python 随机数生成器

学习如何使用 Python 生成随机数,包含交互式代码示例。使用 random、secrets 和 numpy 模块实时执行代码并查看结果。

需要快速生成随机数?

试试我们的在线随机数生成器,无需编写任何代码即可获得即时结果。

打开随机数生成器

Python 代码编辑器

学习如何使用 Python 生成随机数,包含交互式代码示例。使用 random、secrets 和 numpy 模块实时执行代码并查看结果。

import random

# Generate random integers between min and max
min_val = 1
max_val = 100
quantity = 5

# Generate multiple random numbers
numbers = [random.randint(min_val, max_val) for _ in range(quantity)]
print(f"Random numbers: {numbers}")

输出

Pyodide(Python 到 WebAssembly)

正在运行代码...

基础随机整数

使用 random.randint() 在指定范围内生成随机整数。这是最常用的通用随机数生成方法。

理解 Python 随机数生成

Python 提供多种生成随机数的方法,每种方法适用于不同的使用场景。random 模块使用基于 Mersenne Twister 算法的伪随机数生成(PRNG),而 secrets 模块提供加密安全的随机数,适用于密码生成和安全令牌。

random

random 模块提供快速的伪随机数生成,适用于模拟、游戏和一般编程任务。

secrets

secrets 模块使用 os.urandom() 生成加密安全的随机数,适用于密码生成、安全令牌和认证系统。

numpy

NumPy 的随机模块提供高效的基于数组的随机数生成,非常适合科学计算、数据分析和大规模模拟。

常见使用场景

游戏和模拟

使用 random.randint() 或 random.choice() 生成随机骰子点数、抽牌、战利品掉落和游戏事件。

安全和密码学

使用 secrets 模块创建安全密码、API 密钥、会话令牌和加密盐值。

数据科学和统计

使用 numpy.random() 生成用于测试、统计采样和蒙特卡洛模拟的随机数据集。

软件测试

创建随机测试数据和边界情况,确保健壮的代码覆盖率和错误检测。

Python 随机数生成工作原理

Python 的 random 模块使用 Mersenne Twister 算法,这是一种广泛使用的伪随机数生成器(PRNG)。它生成看似随机但实际上基于初始种子值确定性的数字序列。

secrets 模块在 Python 3.6 中引入,使用 os.urandom() 访问操作系统的加密随机性源。这提供了适用于安全敏感应用的真正随机性。

NumPy 的随机模块构建在 Mersenne Twister 的 C 实现之上,提供快速的向量化操作,高效生成大量随机数数组。

注意:所有代码执行都在浏览器中使用 Pyodide(编译为 WebAssembly 的 Python)完成。没有代码或数据会发送到我们的服务器,确保完全的隐私和安全。

Python 随机数生成专家提示

🔄

使用种子实现可重复性

使用 random.seed(42) 设置种子值以获得可重复的结果。对于调试和科学实验至关重要。

🔒

安全最佳实践

始终使用 secrets 模块生成密码、API 密钥和安全令牌。切勿将 random 用于加密目的。

⚡

使用 NumPy 提升性能

对于生成大量随机数数组,NumPy 比使用 random 模块的列表推导式快得多。

技术规格

算法

  • Mersenne Twister(random 模块)
  • os.urandom()(secrets 模块)
  • NumPy Mersenne Twister(C 实现)

性能

  • random: 约 100 万数字/秒
  • secrets: 约 10 万数字/秒(由于 OS 调用较慢)
  • numpy: 约 1000 万 + 数字/秒(向量化)

最佳使用场景

  • random: 游戏、模拟、一般编程
  • secrets: 密码、令牌、加密
  • numpy: 数据科学、大规模模拟

常见问题

涵盖了哪些 Python 模块?

内置 random 模块、用于安全工作的 Secrets 模块以及用于数组友好生成的 numpy。

我可以运行页面上的示例吗?

可以。该页面加载浏览器内的 Python 运行时,因此您可以编辑和运行每个代码片段并查看真实输出。

我应该使用哪个模块来存储令牌或密码?

使用机密。随机模块适用于模拟和游戏,但在加密方面不安全。

我的代码在服务器上运行吗?

不。执行发生在浏览器环境中,因此您输入的任何内容都不会上传。

如何在 Python 中生成 1 到 10 之间的随机整数?

使用 random.randint(1, 10),它返回 1 到 10 之间(包含两端点)的整数。如果需要同一范围内的浮点数,请调用 random.uniform(1, 10)。您可以在本页的交互式示例中编辑并运行这段代码。

Python 的随机数是真正的随机数吗?

不是。random 模块使用 Mersenne Twister 伪随机数生成器,浮点精度为 53 位,因此其输出是确定性的,不适合用于密码学。对于密码、令牌或密钥等安全敏感的值,请使用 secrets 模块,它从操作系统的密码学安全随机源获取随机性。

如何让每次运行代码时都得到相同的随机数?

在生成随机数之前调用 random.seed(42) 或任意固定的整数。设置种子会将 Mersenne Twister 置于可复现的状态,因此 randint、random、shuffle 和 choice 在每次运行时都会返回相同的序列。这对于测试、调试以及复现机器学习或模拟实验至关重要。

numpy 生成随机数比 random 模块更快吗?

是的,而且快得多。像 np.random.randint(1, 101, size=1000000) 这样的一次调用即可通过向量化操作生成一百万个整数,避免了 random 模块的 randint 逐个取值所需的缓慢 Python 循环。当您需要为模拟、抽样或统计分析生成数千到数百万个随机值时,请使用 numpy。

为什么学习 Python 随机数生成?

🎯

多样化方法

  • 多种模块满足不同需求
  • 从简单游戏到加密应用
  • 易于学习,功能强大
💼

实际应用

  • 用于数据科学和机器学习
  • 测试和 QA 的必备技能
  • 安全应用的关键技术
🌟

行业标准

  • 广泛用于生产系统
  • 强大的社区支持和文档

参考资料与资源