私はPythonが初めてで、これに頭を悩ませることはできません。次の関数が定義されています。
def FlipCoins(num_flips):
heads_rounds_won = 0
for i in range(10000):
heads = 0
tails = 0
for j in range(num_flips):
dice = random.randint(0,1)
if dice==1: heads += 1
else: tails += 1
if heads > tails: heads_rounds_won += 1
return heads_rounds_won
すべきことは次のとおりです (ただし、明らかにそうではありません): コインをnum_flip
1 回投げ、表と裏を数え、裏よりも表が多いかどうかを確認します。はいの場合、head_rounds_won
1 ずつ増やします。10000 回繰り返します。
head_rounds_won
およそ 5000 (50%)になると思います。そして、入力として奇数に対してそれを行います。たとえば、3、5、または 7 で約 50% が生成されます。ただし、偶数の場合ははるかに低い結果になり、34% 程度になります。特に小さい数値、たとえば 800 のような偶数の大きい数値では、50% までの差ははるかに小さくなります。
これはなぜですか?どの入力も約 50% の表/裏を生成するべきではありませんか?