所属专题:[遗传](README.md);[概率论](README.md)
 
## 问题
**输入:** 三个正整数`$ k $`, `$ m $`, `$ n $`,表示在一个包含了`$ (k+m+n) $`个个体的种群中,有`$ k $`个个体在某个等位基因上表现为纯合显性基因型,有`$ m $`个个体表现为杂合子,有`$ n $`个个体是纯合隐性基因型。
**输出:** 随机选取的两个个体进行交配产生的后代携带显性等位基因的概率(该个体也表现为显性性状)。假设任何两个个体都能成功交配。
**样例数据:**
~~~
2 2 2
~~~
**样例输出:**
~~~
0.78333
~~~
 
## 背景知识
该问题涉及“孟德尔第一定律”的理解与应用,又称为“分离定律”,指亲代个体产生配子时,同一对等位基因会相互分离进入不同配子,每个配子仅携带一个等位基因的现象。该问题的计算过程要求掌握概率论的基础知识。详情请查阅ROSALIND网站上[关于该问题的背景说明](http://rosalind.info/problems/iprb/)。
 
## 解答
```
from scipy.special import comb
def prob_dom(k, m, n):
"""计算给定二倍体种群随机交配的F1代表现为显性性状的概率。
参数说明:种群中有k个显性纯合子、m个杂合子、n个隐性纯合子。
"""
c_total = comb(k+m+n, 2)
prob = 1*(1-comb(m+n, 2)/c_total) + 0.75*(comb(m, 2)/c_total) + 0.5*(comb(m, 1)*comb(n, 1)/c_total)
return prob
## --main--
with open("rosalind_iprb.txt", 'r') as f1:
k,m,n = map(int, f1.read().split())
result = prob_dom(k, m, n)
with open("rosalind_iprb_out.txt", 'w') as f2:
f2.write(str(result))
```