【问题标题】:Python random.randint() keeps returning 0 after certain time [closed]Python random.randint() 在一定时间后不断返回 0 [关闭]
【发布时间】:2017-07-30 07:06:31
【问题描述】:

我试图在 python 的范围内获取 3 个随机数而不进行替换。我这样做了

rand_lst = []

while(True):
    rand = random.randint(0, length-1 )
    if(len(rand_lst) == 3):
         break
    if(rand not in rand_lst):
         rand_lst.append(rand)

此代码位于 for 循环中。这仅返回 0,因此是一个无限循环。我也尝试过 numpy.random.randint,但有些随机性是如何跟踪先前生成的数字,我最终会出现值错误。

【问题讨论】:

  • 什么是length
  • 你可能想查看random.sample:具体来说,试试random.sample(range(length), 3)

标签: python random


【解决方案1】:

尝试将print(length) 放在您的while True 之前。您几乎肯定会发现length 的值不是您所期望的。 (当您希望它至少为 3 时,它可能是 0 或 1。)

【讨论】:

  • 没错,我做到了,任何长度都是1,这很奇怪!谢谢:)
【解决方案2】:

如果我理解正确, 你想要这样的东西:

import random
rand_lst = []
length = 10

while(True):
    rand = random.randint(0, length-1 )
    if(len(rand_lst) == 3):
         break
    if(rand not in rand_lst):
         rand_lst.append(rand)
print(rand_lst)

这样“length”有值,不会报错

【讨论】:

    【解决方案3】:

    解释:https://stackoverflow.com/a/33806926/8386640

    使用随机样本。这是代码。

    import random
    
    rand_lst = []
    length = 3
    
    while(len(rand_lst) < 3):
        rand_lst.append(random.sample(range(length), 3))
    print rand_lst
    

    【讨论】:

    • 顺便说一句,这是滥用break 的一个典型例子——而不是在循环中使用条件中断,应该使用while len(rand_lst) &lt; 3:
    • 您的while 循环是不必要的。 rand_lst = random.sample(range(length), 3) 已经完全自己生成了 OP 需要的内容。
    • @Błotosmętek 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2015-09-04
    • 2023-03-28
    相关资源
    最近更新 更多