8

我有一个简单的问题。我需要一种方法来制作一个函数,该函数在 p% 的情况下生成 0,在所有其他情况下生成 1。我尝试使用 random.random() 这样做:

p = 0.40

def generate():
    x = random.random()
    if x < p:
        return 0
    else:
        return 1

但是,这似乎不是一个好方法。或者它是?

4

1 回答 1

9

您当前的方法非常好,您可以通过多次尝试进行几次试验来验证这一点。例如,我们预计在 1000000 次尝试中大约有 600000 个 True 结果:

>>> sum(generate() for i in range(1000000))
599042
>>> sum(generate() for i in range(1000000))
599670
>>> sum(generate() for i in range(1000000))
600011
>>> sum(generate() for i in range(1000000))
599960
>>> sum(generate() for i in range(1000000))
600544

看起来是对的。

如评论中所述,您可以稍微缩短您的方法:

p = 0.40

def generate():
    return random.random() >= p

如果你想要1and0而不是TrueandFalse你可以使用int(random.random() >= p),但这几乎绝对是不必要的。

于 2013-06-07T20:42:09.487 回答