真正的Python随机百分比

say*_*yth 4 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mar*_*ers 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%的时间,您将使用标准的6面骰子滚动值<7.0%的时间你会滚动一个值<1,50%的时间你会滚动一个值<4(1,2或3),66.67%的时间滚动一个小于5的值(所以你所有卷的2/3).该random.random()返回值只是有一个更大范围的不仅仅是6不同的值.