【问题标题】:Does This increase Randomness of a Generatored Number?这会增加生成数的随机性吗?
【发布时间】:2020-08-17 22:48:55
【问题描述】:

我是 python 编程的新手,我写了这段代码作为一个实验。我的问题是,这会增加生成数字的随机性还是只是浪费代码?

import random

def random_number_generator():
    """ Returns a randomized random number """

    # initialize 10 variable that will have random integers from range 1-10
    r1 = random.randint(1, 10)
    r2 = random.randint(1, 10)
    r3 = random.randint(1, 10)
    r4 = random.randint(1, 10)
    r5 = random.randint(1, 10)
    r6 = random.randint(1, 10)
    r7 = random.randint(1, 10)
    r8 = random.randint(1, 10)
    r9 = random.randint(1, 10)
    r10 = random.randint(1, 10)

    # create a list that contains the 10 random integer variables
    random_lst = [r1, r2, r3, r4, r5, r6, r7, r8, r9, r10]

    # Use the random.choice() method to randomly select 1 of the 10
    # random numbers (that are randomized 1 -10)
    res = random.choice(random_lst)

    # return results
    return res


print(random_number_generator())

我的问题是,这是否会增加生成数字的随机化,或者它是否比仅应用随机一次更随机?提前感谢您提供任何有用的建议或信息。

【问题讨论】:

  • 如果你想“增加随机性”(无论这意味着什么!?我建议阅读统计数据和密码学来完善你的问题)你最好使用random.SystemRandom().randint(1, 10) 这会给您可以访问系统的 CSPRNG,这更难预测(这通常是 PRNG 的判断方式)
  • 太棒了,感谢 sn-p 和建议! “增加随机性” == “更难预测” - 这就是我的意思,谢谢先生!

标签: python list random


【解决方案1】:

简短回答:没有

长答案:如果我们假设 random.randint 是一个从范围内均匀生成数字的 PRNG,那么它已经处于最大的“随机性”(又名熵),所以你不会让它变得更好。在实践中,除非你在做密码学,否则请继续做这个假设。

(如果您知道/假设底层 RNG 存在缺陷,那么我不确定。我会假设做这样的事情实际上会降低整体熵,因为缺陷可能会以某种方式复合?)

【讨论】:

  • 只是一个非常简单的想法:如果 RNG 有一个“11 次呼叫”的周期,那么他们的想法通过总是产生相同的数字而使其更糟
  • 感谢您的回复!这对我来说很有意义!快速提问:学习算法会帮助我理解我自己的问题吗?
  • 我认为密码学 101 可能具有最大的信息增益(呵呵),可以在这里为您提供知识。
猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
相关资源
最近更新 更多