Python随机数在Mac和Windows上种子不同

4 投票
2 回答
2261 浏览
提问于 2025-04-16 21:03

我正在开发一个Python应用程序,这个程序会在Mac和Windows上运行,并通过py2app和py2exe打包成可执行文件。确保所有应用程序始终生成相同的随机数是很重要的。因此,随机模块总是使用相同的种子。

不过,random.shuffle()的结果在Windows和Mac上似乎差别很大。

有没有办法确保始终生成相同的随机数呢?

代码其实很简单:

import random
random.seed("ladygaga")
swaplist_odd  = [n for n in range(len(clipboard)) if n % 2 != 0]
swaplist_even = [n for n in range(len(clipboard)) if n % 2 == 0]
random.shuffle(swaplist_odd)
random.shuffle(swaplist_even)

这个想法是对一个缓冲区进行洗牌,并能够通过再次洗牌来恢复原来的缓冲区。

如果在同一个操作系统内进行这个过程,就没有问题。但一旦把缓冲区文件复制到另一个操作系统,恢复原来的内容就会失败。

2 个回答

0

Python 2.x 和 Python 3.x 的随机数生成器不兼容,即使用相同的数字作为种子,它们返回的结果也会不同。

对我来说,在 MacOS 上的 Python 2.7.16 和在 Ubuntu 上的 Python 2.7.12 返回的结果是一样的。

而在 MacOS 上的 Python 3.7.3 和在 Ubuntu 上的 Python 3.5.2 返回的结果也是一样的。

此外,字符串的哈希值在不同的 Python 安装中可能会不同,所以你应该使用数字作为种子,而不是 ladygaga

2

你有没有可能在用两个不同版本的Python呢?

根据官方文档,Python从2.3版本开始,生成伪随机数的方法从Wichmann-Hill算法换成了Mersenne Twister算法。

撰写回答