python中的二项式分布概率

python中的二项式分布概率,python,probability,Python,Probability,对于此问题: 在俄罗斯出生的婴儿的男女比例为1.09:1。如果每出生一个孩子,那么在俄罗斯有6个孩子的家庭中,至少有3个男孩的比例是多少? 编写一个程序,使用上述参数计算答案: 包含以下值的单行: 1.09 1 这是我的节目: pp=str(input()) p1=float(pp[:pp.find(' ')]) p2=float(pp[pp.find(' ')+1:]) pf=0.0 pa=0.0 from math import factorial as f def comb(n,r):

对于此问题:

在俄罗斯出生的婴儿的男女比例为1.09:1。如果每出生一个孩子,那么在俄罗斯有6个孩子的家庭中,至少有3个男孩的比例是多少? 编写一个程序,使用上述参数计算答案: 包含以下值的单行:

1.09 1

这是我的节目:

pp=str(input())
p1=float(pp[:pp.find(' ')])
p2=float(pp[pp.find(' ')+1:])
pf=0.0
pa=0.0
from math import factorial as f
def comb(n,r):
    return f(n) / f(r) / f(n-r)
for i1 in range(1,7):
    if i1>=3:
        pf=pf+(pow(p1,i1)+pow(p2,6-i1))*comb(6,i1)
    pa=pa+(pow(p1,i1)+pow(p2,6-i1))*comb(6,i1)
print("%.3f"%(pf/pa))

我得到的答案是0.688,正确答案是0.696,我的代码有什么问题?

你需要计算概率:

from math import factorial as f
b, g = map(float, input().split())
p = b / (b+g)
def comb(n, r):
    return f(n) / (f(r) * f(n-r))
n = 6
sum(p**k * (1-p)**(n-k) * comb(n, k) for k in range(3, 7))
# 0.6957033161509107

您需要计算概率:

from math import factorial as f
b, g = map(float, input().split())
p = b / (b+g)
def comb(n, r):
    return f(n) / (f(r) * f(n-r))
n = 6
sum(p**k * (1-p)**(n-k) * comb(n, k) for k in range(3, 7))
# 0.6957033161509107

我已经修复了自己的代码问题:0表示循环开始,而不是1;和*表示pf sum中的+:

pp=str(input())
p1=float(pp[:pp.find(' ')])
p2=float(pp[pp.find(' ')+1:])
pf=0.0
pa=0.0
from math import factorial as f
def comb(n,r):
    return f(n) / f(r) / f(n-r)
for i1 in range(0,7):
    if i1>=3:
        pf=pf+(pow(p1,i1)*pow(p2,6-i1))*comb(6,i1)
    pa=pa+(pow(p1,i1)*pow(p2,6-i1))*comb(6,i1)
print("%.3f"%(pf/pa))

现在输出是正确的,但两个答案都比我的方法好。抱歉,我的代码太复杂了,谢谢您的帮助。

我已经解决了自己的代码问题:0表示循环开始,而不是1;和*表示pf sum中的+:

pp=str(input())
p1=float(pp[:pp.find(' ')])
p2=float(pp[pp.find(' ')+1:])
pf=0.0
pa=0.0
from math import factorial as f
def comb(n,r):
    return f(n) / f(r) / f(n-r)
for i1 in range(0,7):
    if i1>=3:
        pf=pf+(pow(p1,i1)*pow(p2,6-i1))*comb(6,i1)
    pa=pa+(pow(p1,i1)*pow(p2,6-i1))*comb(6,i1)
print("%.3f"%(pf/pa))

现在输出是正确的,但两个答案都比我的方法好。对不起,我的代码很复杂,谢谢您的帮助。

这些变量的含义是什么?另外:您是否考虑到家庭可能没有男性子女?你的
for
循环从
1开始,所以可能是这导致了小错误。pa是总概率,pf是目标概率,p1是男孩的概率,p2是女孩的概率,在修正了起点之后,现在我得到了0.679仍然不正确。你代码中最明显的错误,对我来说,在数学中:1.09和1不是概率。这些变量的含义是什么?另外:您是否考虑到家庭可能没有男性子女?你的
for
循环从
1开始,所以可能是这导致了小错误。pa是总概率,pf是目标概率,p1是男孩的概率,p2是女孩的概率,在修正了起点之后,现在我得到了0.679仍然不正确。你代码中最明显的错误,对我来说,在数学中:1.09和1不是概率。不是py3(我使用的),如果你使用py2,你是对的。不是py3(我使用的),如果你使用py2,你是对的。