【问题标题】:Possible to get 4 numbers at once with randint()?使用 randint() 可以一次获得 4 个数字吗?
【发布时间】:2022-01-12 23:47:34
【问题描述】:

我尝试使用randintrange(1,6) 中选择4 个数字。我使用for 循环做到了。但在那之后我必须编写 python pytest 测试。所以我遇到了问题,因为在使用monkeypatch而不是例如[1,2,3,4]进行断言之后,我得到了[[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]]

所以我想问一下是否有可能同时选择4个项目而不是使用randint 4次。

def throw_a_cube():
    a = []
    for x in range(4):
        x = randint(1, 6)
        a.append(x)
    return a

【问题讨论】:

  • 欢迎来到 Stack Overflow!请阅读How to create a Minimal, Reproducible Example 并确保包含重现问题所需的所有代码。
  • 您只需要返回x,然后call throw_a_cube() 四次。
  • 不要将randint 结果分配给x,这是您的循环变量。我怀疑分配给循环变量没有奏效,并且默默地失败了。使用另一个变量,例如num 持有 randint 然后 a.append(num)

标签: python list for-loop random pytest


【解决方案1】:

不,我认为不可能一次选择四个。如果您希望获得四个不同的数字,您的代码应该看起来更像这样:

import random

def throw_a_cube():
    a = []
    throws = [1, 2, 3, 4, 5, 6]
    for x in range(4):
        x = random.choice(throws)
        a.append(x)
        throws.remove(x)
    return a

【讨论】:

  • 我知道,但你仍然有循环,所以我会得到我的断言 4 次而不是 1 次。
  • 也许可以用不同的随机选择等来做到这一点?
  • 嗯,我不确定。为什么断言有问题?
  • 我做到了。断言问题是因为对于每个 randint,它都会用 monkeypatch 更改它。我使用 a= [1,2,3,4,5,6] 选择(a,k=4)而不是 randint。
  • @New_stud 如果这些断言是一个问题,您应该在问题中提及它并包含一个 minimal reproducible example 来证明您的问题。
【解决方案2】:

简单的列表理解:

import random

def throw_a_cube():
    return [random.randint(1,6) for _ in range(4)]

【讨论】:

    【解决方案3】:

    这样合适吗?

    from random import choices
    
    throw_a_cube = lambda k: choices(range(1, 6), k=k)
    

    【讨论】:

    • 为什么要使用 lambda?简单的函数 def 肯定会更好
    【解决方案4】:

    如果您发现自己在 Python 中使用 for 循环,那么 通常是更好的方法。在这种情况下,最简单的可能是:

    from random import choices
    
    def throw_a_cube():
        return choices(range(1, 6), k=4)
    
    
    print(throw_a_cube())
    

    结果:

    python 4numbers.py
    [2, 5, 1, 5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2011-08-14
      相关资源
      最近更新 更多