我有一个简单的问题。我需要一种方法来制作一个函数,该函数在 p% 的情况下生成 0,在所有其他情况下生成 1。我尝试使用 random.random() 这样做:
p = 0.40
def generate():
x = random.random()
if x < p:
return 0
else:
return 1
但是,这似乎不是一个好方法。或者它是?
我有一个简单的问题。我需要一种方法来制作一个函数,该函数在 p% 的情况下生成 0,在所有其他情况下生成 1。我尝试使用 random.random() 这样做:
p = 0.40
def generate():
x = random.random()
if x < p:
return 0
else:
return 1
但是,这似乎不是一个好方法。或者它是?
您当前的方法非常好,您可以通过多次尝试进行几次试验来验证这一点。例如,我们预计在 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
如果你想要1
and0
而不是True
andFalse
你可以使用int(random.random() >= p)
,但这几乎绝对是不必要的。