没有从我为概率分配编写的代码中得到预期的答案

问题描述 投票:0回答:1

这是问题陈述=> 在抛掷一枚公平硬币的游戏中,正面朝上玩家可获得 5 美元,反面朝上则损失 3 美元。 8 次抛掷后,计算获得 20 美元净收益的概率。 我必须使用二项式分布来解决问题,并且还需要编写验证答案的 python 代码。

所以我决定写代码。 这是代码=>

import random

toss = [0,1]
#0 for head
#1 for tail
def run():
    gain = 0
    for i in range(8):
        if random.choice(toss) == 0:
            gain += 5
        else:
            gain -= 3
    return gain #final gain for 8 trials
    # print("this is final gain {}".format(gain))

#print(run())
num_of_tests = 0
while run() != 20:
    print(run())
    num_of_tests += 1
    print("Tests ran => ", num_of_tests)

使用此代码,即使我循环 1000 次,经过 8 次试验后,我也没有获得 20 美元的最终收益。 我很困惑。我哪里做错了。 代码中是否有错误。 或者问题的答案是0%?

python-3.x data-analysis probability
1个回答
0
投票

基础数学:增益 = n_heads * 5 - 3 * (N_tosses - n_heads)
所以:增益 = n_heads*8 - 3 * N_tosses

8 次抛掷获得 20 意味着: 20 = 8 * n_heads - 3*8

所以 n_heads = 44/8 因此 n_heads = 11/2 这是不可能的

不需要 python 代码... 如果您真的想编写代码,我会这样做:

import random

def gain():
    return random.choice([-3,5])

def proba(x,results):
    return results.count(x) / len(results)

n_trials = 2000
n_tosses = 8
#for each trial, compute the sum of the gains for a given number of tosses
results = [sum([gain() for _ in range(n_tosses)]) for _ in range(n_trials)]
print(proba(20,results))

无论你进行多少次尝试,它总是会给你 0...

© www.soinside.com 2019 - 2024. All rights reserved.