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%を取得することをどのように定義しますか?

私がそれを読んだとき、それは次のように述べています:ランダムが.87未満の場合

ランダムが.87未満であることは私には意味がないので、これは私が明確にしたいと思っていたものです。

4

1 に答える 1

16

の戻り値はrandom.random()、[0.0、1.0)の範囲(つまり、0.0を含むから1.0を除く)に均一に分散されるため、その範囲内の任意の値にヒットする可能性が等しくなります。

つまり、87%の確率で、.87未満の値が選択されます。

これをのテストに変更すると、そのテストは常に100%random() < 1.0合格します。に変更すると、通過しないため、0%の確率で通過します。また、分布が均一であるため、時間の半分になります。代わりに、[0.5、1.0)の範囲の時間の残りの半分の値が選択されるためです。random() < 0.0random() < 0.5True

あなたはそれをサイコロの目として見ることができます。100%の確率で、標準の6面サイコロで7未満の値を振ります。1未満の値をロールする時間の0%、4未満の値(1、2、または3)をロールする時間の50%、および5未満の値をロールする時間の66.67% (つまり、すべてのロールの3分の2)。random.random()戻り値の範囲は、6つの異なる値よりもはるかに大きくなります。

于 2013-03-25T10:50:55.160 に答える