0

我试图计算累积二项式概率来解决 Rosalind 的“独立等位基因”问题,我认为我的程序是正确的,但结果每次都给我“错误”。

问题:

  • 给定:两个正整数 k (k≤7) 和 N (N≤2k)。在这个问题中,我们从第 0 代具有基因型 Aa Bb 的 Tom 开始。汤姆在第一代有两个孩子,每个孩子有两个孩子,以此类推。每个生物总是与具有基因型 Aa Bb 的生物交配。

  • 返回:至少 N Aa Bb 生物属于汤姆家谱的第 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)

知道我可能做错了什么吗?

4

1 回答 1

0

这是 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)
于 2021-09-24T12:03:50.853 回答