9

我正在尝试获得一个随机布尔值,但具有加权百分比。例如,我希望用户传递一个百分比(即 60),生成器将随机选择真正的 60% 的时间。

我所拥有的是:

def reset(percent=50):
    prob = random.randrange(0,100)
    if prob > percent:
        return True
    else:
        return False

有一个更好的方法吗?这似乎效率低下且麻烦。我不需要它是完美的,因为它只是用来模拟数据,但我需要它尽可能快。

我已经搜索过(Google/SO)并且没有找到任何其他问题。

4

3 回答 3

21

只需返回测试:

def reset(percent=50):
    return random.randrange(100) < percent

因为<低于运算符的结果已经是布尔值。您也不需要给出起始值。

请注意,如果要返回给定百分比,则需要使用低于;True如果percent = 100那么你想要True所有的时间,例如当所有randrange()产生的值都低于该percent值时。

于 2013-01-14T18:40:18.230 回答
2

怎么样:

def reset(percent=50):
    return random.randrange(0, 100) > percent
于 2013-01-14T18:40:19.167 回答
1

@rjbez您要求一个在X百分比时间内返回true的函数。当 X == 0% 时,它应该总是返回 false。当 X == 100% 时,它应该始终返回 true。当前接受的答案现在是固定的并且具有适当的关系

def reset(percent=50):
    return random.randrange(100) < percent
于 2014-09-24T21:28:14.090 回答