我尝试计算累积二项概率来解决"独立等位基因";Rosalind的问题,我认为我的程序是正确的,但结果给了我"错误"。每次.
问题:
-
给定:两个正整数k (k≤7)和N (N≤2k)。在这个问题中,我们从汤姆开始,他是第0代的Aa Bb基因型。汤姆在第一代有两个孩子,每个孩子都有两个孩子,以此类推。每个生物总是与基因型为Aa - Bb的生物交配。
-
Return:至少有N个Aa Bb生物属于Tom家谱的第k代的概率(不计算每一级的Aa Bb伴侣)。假设孟德尔第二定律对因子成立。
我的决议:
def factorial(n):
if n == 0:
return 1
else:
return float(n * factorial(n-1))
print('Nr of generations?')
K=float(input())
print('At least how many AaBb organisms?')
N=float(input())
a=K**2 #found the error!!!
b=factorial(a)
c=factorial(a-N)*factorial(N)
d=(b//c)*(0.25**N)*(0.75**(a-N))
e=[]
while N <= a:
c=factorial(a-N)*factorial(N)
val=(b//c)*(0.25**N)*(0.75**(a-N))
e.append(val)
N=N+1
print('The probability of at least X organisms AaBb is:')
print(round(sum(e),3)) #P(X ≥ x)
知道我可能做错了什么吗?
是2^k而不是k ^2,这就是问题所在
def factorial(n):
if n == 0:
return 1
else:
return float(n * factorial(n-1))
print('Nr of generations?')
K=float(input())
print('At least how many AaBb organisms?')
N=float(input())
a=2**k #found the error!!!
b=factorial(a)
c=factorial(a-N)*factorial(N)
d=(b//c)*(0.25**N)*(0.75**(a-N))
e=[]
while N <= a:
c=factorial(a-N)*factorial(N)
val=(b//c)*(0.25**N)*(0.75**(a-N))
e.append(val)
N=N+1
print('The probability of at least X organisms AaBb is:')
print(round(sum(e),3)) #P(X ≥ x)