我正在尝试在http://rosalind.info/problems/iprb/上解决问题
给定:三个正整数
k
、m
和n
,表示包含k+m+n
生物的种群:k
个体对于一个因素是纯合显性的,m
是杂合的,并且n
是纯合隐性的。返回:两个随机选择的交配生物将产生具有显性等位基因(并因此显示显性表型)的个体的概率。假设任何两种生物都可以交配。
我的解决方案适用于示例,但不适用于产生的任何问题。经过进一步研究,似乎我应该找到随机选择任何一种生物的概率,找到选择第二种生物的概率,然后找到该配对产生具有显性等位基因的后代的概率。
那么我的问题是:我下面的代码找到的概率是多少?它是否找到所有可能交配的具有显性等位基因的后代的百分比 - 因此,如果所有配对都经过测试,我的代码正在解决具有显性等位基因的后代的百分比,而不是一个随机交配的概率?
f = open('rosalind_iprb.txt', 'r')
r = f.read()
s = r.split()
############# k = # homozygotes dominant, m = #heterozygotes, n = # homozygotes recessive
k = float(s[0])
m = float(s[1])
n = float(s[2])
############# Counts for pairing between each group and within groups
k_k = 0
k_m = 0
k_n = 0
m_m = 0
m_n = 0
n_n = 0
##############
if k > 1:
k_k = 1.0 + (k-2) * 2.0
k_m = k * m
k_n = k * n
if m > 1:
m_m = 1.0 + (m-2) * 2.0
m_n = m * n
if n> 1:
n_n = 1.0 + (n-2) * 2.0
#################
dom = k_k + k_m + k_n + 0.75*m_m + 0.5*m_n
total = k_k + k_m + k_n + m_m + m_n + n_n
chance = dom/total
print chance