python 中的二项式分布概率
Binomial Distribution probability in python
对于这个问题:
在俄罗斯出生的婴儿的男孩女孩比例是 1.09:1 如果每胎出生一个 child,那么恰好有 6 个 child 人的俄罗斯家庭的比例是多少至少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
#Your input
pp=str(input())
p1=float(pp[:pp.find(' ')])
p2=float(pp[pp.find(' ')+1:])
pf=0.0
#This is the probability of boy
p = p1/(p1+p2)
from math import factorial as f
def comb(n,r):
return f(n) / f(r) / f(n-r)
#You have to sum the probabilities of 3,4,5 or 6 boys
for i1 in range(3,7):
#You were not using the right formula (it's a multiplication, not a sum)
prob_i1 = pow(p,i1)*pow(1-p,6-i1)*comb(6,i1)
pf += prob_i1
print("%.3f"%(pf))
我已经修复了我自己的代码问题:0 for loop start 而不是 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))
现在输出是正确的,但两个答案都比我的方法好。对不起,我的代码很复杂,感谢您的帮助。
对于这个问题:
在俄罗斯出生的婴儿的男孩女孩比例是 1.09:1 如果每胎出生一个 child,那么恰好有 6 个 child 人的俄罗斯家庭的比例是多少至少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
#Your input
pp=str(input())
p1=float(pp[:pp.find(' ')])
p2=float(pp[pp.find(' ')+1:])
pf=0.0
#This is the probability of boy
p = p1/(p1+p2)
from math import factorial as f
def comb(n,r):
return f(n) / f(r) / f(n-r)
#You have to sum the probabilities of 3,4,5 or 6 boys
for i1 in range(3,7):
#You were not using the right formula (it's a multiplication, not a sum)
prob_i1 = pow(p,i1)*pow(1-p,6-i1)*comb(6,i1)
pf += prob_i1
print("%.3f"%(pf))
我已经修复了我自己的代码问题:0 for loop start 而不是 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))
现在输出是正确的,但两个答案都比我的方法好。对不起,我的代码很复杂,感谢您的帮助。