我正在尝试获得一个随机布尔值,但加权百分比。例如,我希望用户传入百分比(即60),并且生成器将在60%的时间内随机选择真实。
我拥有的是:
def reset(percent=50):
prob = random.randrange(0,100)
if prob > percent:
return True
else:
return False
有更好的方法吗?这似乎效率低下且繁琐。我不需要它是完美的,因为它只是用于模拟数据,但我需要尽可能快。
我搜索过(Google / SO)并且没有找到任何其他问题。
答案 0 :(得分:17)
只需返回测试:
def reset(percent=50):
return random.randrange(100) < percent
因为<
低于运算符的结果已经是布尔值。您也不需要给出起始值。
如果您希望在给定百分比内返回True
,则需要使用低于;如果percent = 100
,则您始终需要True
,例如当randrange()
生成的所有值都低于percent
值时。
答案 1 :(得分:1)
怎么样:
def reset(percent=50):
return random.randrange(0, 100) > percent
答案 2 :(得分:1)
@rjbez您要求一个函数在 X 的时间内返回 true 。当X == 0%时,它应该总是返回false。当X == 100%时,它应该总是返回true。目前接受的答案现已修复并具有适当的关系
def reset(percent=50):
return random.randrange(100) < percent