Rosalind的Independent Alleles问题累积二项概率Python计算错误排查
代码存在的核心错误
- 个体总数计算错误:第k代的总个体数为
2^k(每代个体数翻倍),你代码中写的a=K**2计算的是K的平方,仅在K=2时结果巧合一致,其余数值都会出错,正确写法为a = 2 ** int(K)。 - 阶乘计算精度问题:你定义的
factorial函数返回值为浮点型,当K取值较大时(比如K=7时总个体数为128),大阶乘的浮点存储会丢失精度,后续用//整除计算组合数的结果必然错误。建议直接使用Python 3.10+内置的math.comb计算组合数,无需自行实现阶乘,既高效又能避免精度问题。 - 输入类型冗余:K和N均为正整数,转换为float没有必要,直接转换为int更符合运算逻辑。
修正后的参考代码
import math k = int(input('Nr of generations?')) n = int(input('At least how many AaBb organisms?')) total = 2 ** k prob_sum = 0 for x in range(n, total + 1): # 计算二项概率 P(X=x) = C(total, x) * 0.25^x * 0.75^(total-x) comb = math.comb(total, x) prob_sum += comb * (0.25 ** x) * (0.75 ** (total - x)) print('The probability of at least X organisms AaBb is:') print(round(prob_sum, 3))
内容的提问来源于stack exchange,提问作者MarianaZ
相关产品推荐
相关产品推荐

