Python随机数在Mac和Windows上种子不同
我正在开发一个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算法。