种子python随机在Mac和Windows上产生不同的数字

时间:2011-07-07 19:53:33

标签: python windows macos random portability

我参与了一个将在Mac和Windows上运行的python应用程序,用py2app和py2exe打包成可执行文件。所有应用程序始终生成相同的随机数非常重要。所以随机模块总是得到相同的种子。

然而,在Windows和Mac上,random.shuffle()的结果似乎非常不同。

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

代码非常令人兴奋:

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 :(得分:2)

您是否有可能使用两种不同版本的Python?

根据documentation,Python从使用Wichmann-Hill算法转向使用Mersenne Twister从2.3开始生成伪随机数。

答案 1 :(得分: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