我正在尝试解决http://rosalind.info/problems/list-view/上的问题,有一个称为IPRB的问题。总之,我们有3种不同的生物体k(纯合子优势),m(杂合子)和n(隐性纯合子)。它要求您计算两个随机选择的个体的后代具有优势等位基因的概率。您可以从此处(http://rosalind.info/problems/iprb/)进行检查。
我的问题是;我用示例输入(k,m,n分别为2、2、2)编写了一个工作代码,并获得了估计的输出。但是,当输入值彼此不同(即25、20、18)时,出现如下错误消息:
回溯(最近通话最近): 文件“ C:/Users/mNm/PycharmProjects/PySummer/venv/Scripts/IPRB.py”,第43行 pr3 =浮动(pr31 + pr32 + pr33) NameError:名称“ pr31”未定义
我在线研究了该代码的原因。似乎此错误与名称定义有关,例如使用后定义或功能超出定义等。但是在检查时我没有任何定义。简而言之,我不知道如何解决它,所以我决定在这里询问。
k = 2
m = 2
n = 2
whole = k + m + n
org = [k, m, n]
我有3个变量和一个保存它们的列表。输入工作正常,但是...
例如当它是:
k = 25
m = 25
n = 19
whole = k + m + n
org = [k, m, n]
我得到了错误:
回溯(最近通话最近): 文件“ C:/Users/mNm/PycharmProjects/PySummer/venv/Scripts/IPRB.py”,第43行 pr3 =浮动(pr31 + pr32 + pr33) NameError:名称“ pr31”未定义
第43行在这里:
if i == n:
n_start = float(n / whole)
for j in org:
if j == k:
pr31 = float(n_start * (k / (whole - 1)))
if j == m:
pr32 = float(n_start * (m / (whole - 1)) * 0.5)
if j == n:
pr33 = float(n_start * ((n - 1) / (whole - 1)) * 0)
43-> pr3 = float(pr31 + pr32 + pr33)
如果您想查看整个内容并进行检查,我也想粘贴我的完整代码。
k = 2
m = 2
n = 2
whole = k + m + n
org = [k, m, n]
for i in org:
if i == k:
k_start = float(k/whole)
for j in org:
if j == k:
pr11 = float(k_start * ((k - 1) / (whole - 1)))
if j == m:
pr12 = float(k_start * (m / (whole - 1)))
if j == n:
pr13 = float(k_start * (n / (whole - 1)))
pr1 = float(pr11 + pr12 + pr13)
if i == m:
m_start = float(m/whole)
for j in org:
if j == k:
pr21 = float(m_start * (k / (whole - 1)))
if j == m:
pr22 = float(m_start * ((m - 1) / (whole - 1)) * 0.75)
if j == n:
pr23 = float(m_start * (n / (whole - 1)) * 0.5)
pr2 = float(pr21 + pr22 + pr23)
if i == n:
n_start = float(n / whole)
for j in org:
if j == k:
pr31 = float(n_start * (k / (whole - 1)))
if j == m:
pr32 = float(n_start * (m / (whole - 1)) * 0.5)
if j == n:
pr33 = float(n_start * ((n - 1) / (whole - 1)) * 0)
pr3 = float(pr31 + pr32 + pr33)
dom_pr = float(pr1 + pr2 + pr3)
print(dom_pr)
我希望输出值在0-1之间,因为这是一个可能性,但是更重要的是了解导致该错误的原因以及我做错了什么。
答案 0 :(得分:1)
这对我来说看起来不错,但是如果您仍然遇到错误,请尝试覆盖try catch块内的i循环。
try:
k = 25
m = 20
n = 19
whole = k + m + n
org = [k, m, n]
for i in org:
if i == k:
k_start = float(k/whole)
for j in org:
if j == k:
pr11 = float(k_start * ((k - 1) / (whole - 1)))
if j == m:
pr12 = float(k_start * (m / (whole - 1)))
if j == n:
pr13 = float(k_start * (n / (whole - 1)))
pr1 = float(pr11 + pr12 + pr13)
if i == m:
m_start = float(m/whole)
for j in org:
if j == k:
pr21 = float(m_start * (k / (whole - 1)))
if j == m:
pr22 = float(m_start * ((m - 1) / (whole - 1)) * 0.75)
if j == n:
pr23 = float(m_start * (n / (whole - 1)) * 0.5)
pr2 = float(pr21 + pr22 + pr23)
if i == n:
n_start = float(n / whole)
for j in org:
if j == k:
pr31 = float(n_start * (k / (whole - 1)))
if j == m:
pr32 = float(n_start * (m / (whole - 1)) * 0.5)
if j == n:
pr33 = float(n_start * ((n - 1) / (whole - 1)) * 0)
pr3 = float(pr31 + pr32 + pr33)
dom_pr = float(pr1 + pr2 + pr3)
except Exception as e:
dom_pr=None
print(e)
print(dom_pr)