多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
所属专题:[遗传](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)) ```