我在随机和秘密之间进行了研究,发现秘密是“加密安全的”。每个人都说堆栈溢出源是最接近真实随机的。所以我想用它来生成一个种群。然而,它并没有给出非常随机的结果,而是可预测的结果。
我测试的第一个特征是性别,确切地说是4个,并将其全部绘制出来……
# code may not function as it's typed on mobile without a computer to test on
import secrets
import multiprocessing
def gen(args*):
gender = ["Male", "Female", "X", "XXY"]
rng = secrets.choice(gender)
return rng
with multiprocessing.Pool(processes=4) as pool:
id_ = [I for I in range (2000000000)]
Out = pool.map(gen, id_)
# Do stuff with the data
当我通过其他函数处理数据时,这些函数确定了一个性别对另一个性别的百分比,它总是25 +- 1%。我希望偶尔有100%的1个性别和0个其他性别,但这从来没有发生过。
我也尝试了用随机数做同样的事情,它产生了类似的结果,但不知何故花费了两倍的时间。
我还将列表性别更改为X和XXY中的一个,同时拥有其他两个中的49个,并给出了1% X和1% XXY的可预测结果。
除了熵这个术语之外,我在计算机上没有太多使用RNG的经验……Python有没有本机或PYPI包可以产生熵或混沌数字?
secrets模块应该以某种可预测的方式运行吗?
发布于 2019-04-11 03:42:19
我想你可能把一些不同的想法混在一起了。
每次调用secrets.choice
函数时,它都会随机选择您提供的4个性别选项中的1个,在您的示例中是2000000000次。在任何合理实现的随机性生成器中,在从4个选项的列表中随机选择2000000000次之后,获得任何选项的100%的可能性实际上为零。
如果我对你的问题理解正确的话,这实际上是一个非常有力的证据,证明secrets.choice
函数的行为符合预期,并提供了一个均匀的选项分布。当你的N接近无穷大时,方差应该降到零。
https://stackoverflow.com/questions/55619991
复制相似问题