【问题标题】:random.randint(2, 12) returns same results every time it's run in Pythonrandom.randint(2, 12) 每次在 Python 中运行时都会返回相同的结果
【发布时间】:2016-02-21 17:18:40
【问题描述】:

我有一个脚本可以生成 2 到 12 之间的 10 个随机数:

repetition = 10
while repetition > 0:
    print(random.randint(2,12))
    repetition = repetition - 1

执行此代码时会生成 10 个随机数,但每次执行代码时都会生成相同的 10 个随机数。即使我在另一台计算机上运行代码也会发生这种情况!

【问题讨论】:

  • 你能把你的代码结果也添加到问题中吗?
  • 您的代码的某些其他部分必须使用固定值播种随机生成器。
  • 是重现问题的全部代码吗? random 有一个 seed 函数,用于设置 PRNG 的起点;如果这是在您调用之前设置的,那么预期的行为是每次都获得相同的结果,甚至在不同的计算机上。
  • 有点离题,但从 2 到 12 的范围来看,您可能正在模拟一对骰子。如果是这样,您应该在 1 到 6 范围内生成 两个 随机数并将它们相加,否则您的赔率将不一样。
  • 你从哪里运行这个?我也无法重新电镀。添加完整代码可能会有所帮助。

标签: python python-3.x random


【解决方案1】:

您首先应该了解的是,计算机生成的随机数并不是真正随机的。为了生成一个伪随机数,计算机使用了一个函数,该函数根据先前的值生成一个数字(更多详细信息请参见https://en.wikipedia.org/wiki/Random_number_generation)。伪随机数的序列取决于传递给此函数的第一个值,称为 seed

默认情况下,在 Python 的随机模块使用的 Random 类的构造函数 (__init__) 中,种子由操作系统定义。这通常基于当前系统时间。如果您使用函数random.seed 定义了自己的种子,您的结果将是确定性的。在这种情况下,您将始终获得相同的值。

【讨论】:

    【解决方案2】:

    我在做的时候遇到了同样的问题

    from random import randint
    randint(0, 10)
    

    现在我只是这样做

    import random
    

    然后

    random.randint(0, 10)
    

    它可以工作

    【讨论】:

      【解决方案3】:

      您可以根据时间设置种子值。每次调用都会改变种子值。

      import random
      import time
      random.seed(time.clock())
      repetition = 10
      while repetition > 0:
         print(random.randint(2,12))
         repetition = repetition - 1
      

      【讨论】:

      【解决方案4】:

      #试试numpy:

      将 numpy 导入为 np

      np.random.randint(low=1,high=7,size=10)

      #最有可能的是,每次运行后它会给你不同的结果。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。

        from random import randint
        
        randint(2, 12)
        

        这对我有用。

        【讨论】:

          猜你喜欢
          • 2020-01-28
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 2020-09-27
          • 2018-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多