真正的Python随机百分比

时间:2013-03-25 10:48:09

标签: python random

我不明白我在真正的python书中找到的这种语法,并希望我能得到一些清晰度。

from __future__ import division
from random import random

total_A_wins = 0
total_B_wins = 0

trials = 100000
for trial in range(0, trials):
    A_win = 0
    B_win = 0
    if random() < .87: # 1st region
        A_win += 1
    else:
        B_win += 1
    # determine overall election outcome
    if A_win > B_win:
        total_A_wins += 1
    else:
        total_B_wins += 1

print "Probability A wins:", total_A_wins/trials
print "Probability B wins:", total_B_wins/trials

所以在练习中他们说A有87%的获胜机会。但是random()&lt; .87定义A会得到87%?

当我读到它时,它说: 如果随机小于.87

这是我希望澄清的,因为随机小于.87对我来说没有意义。

1 个答案:

答案 0 :(得分:13)

random.random()的返回值在[0.0,1.0]范围内均匀分布(因此从0.0到1.0不包括在内),因此它有相同的机会击中该范围内的任何值。

这意味着87%的时间,价值低于.87。

如果您要将其更改为random() < 1.0的测试,则该测试将100%的时间通过始终。如果您将其更改为random() < 0.0,它将永远不会通过,所以0%的时间。由于分布是统一的,random() < 0.5将是True一半的时间,因为将会选择范围[0.5,1.0]中的另一半时间值。

你可以把它当成骰子卷; 100%的时间,你会滚动一个值&lt; 7用标准的6面骰子。 0%的时间你会滚动一个值&lt; 1,50%的时间你会滚动一个值&lt; 4(1,2或3),以及66.67%的滚动值小于5的时间(因此所有卷的2 / 3rds)。 random.random()返回值只有大于6个不同值的范围。