7

我不明白我在真正的 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 () < .87 如何定义 A 将获得 87% 呢?

当我读到它时,它说:如果随机数小于 0.87

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

4

1 回答 1

16

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

这意味着 87% 的时间,选择低于 0.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 个不同的值要大得多

于 2013-03-25T10:50:55.160 回答