【问题标题】:random boolean by percentage按百分比计算的随机布尔值
【发布时间】:2012-12-28 18:26:55
【问题描述】:

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

我拥有的是这样的:

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

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

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

【问题讨论】:

标签: python random python-2.7


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我想我应该对此添加评论。我很久以前就知道了,并更新了代码,但没有更新问题。
【解决方案2】:

只需返回测试:

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

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

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

【讨论】:

  • 我还要注意,一般来说,接受从 01 的浮点数更正常 - 百分比是一个有用的人类概念,但在计算中,这可能意味着乘以东西无缘无故起来。浮点数将提供更多允许的机会范围,并且可能更快(只需使用random.random() 而不是randrange())。
  • @Lattyware:当然可以,但是如果用户输入已经以整数值给出,那就没关系了。
  • 我会选择“今天是星期一”
  • @rjbez:真的吗?发誓! :-P
  • @MartijnPieters 当然,我只是说更一般的情况。
【解决方案3】:

怎么样:

def reset(percent=50):
    return random.randrange(0, 100) > percent

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2017-12-20
    • 1970-01-01
    • 2019-02-09
    • 2018-04-19
    相关资源
    最近更新 更多