我的任务是设计一个识别RNA代码长度的功能(不包括起始密码子和终止密码子)。该函数还必须确定其代码是否实际有效(必须包含AUG作为起始密码子,并在末尾包含UGA,UAA或UAG)注意:RNA以起始密码子AUG开头,以UGA,UAA或UAG结尾如果不满足上述条件,该函数必须返回“不可读的RNA代码”。
def rna_length(mrna):
start_trans = 'AUG'
end_trans1 = 'UAA'
end_trans2 = 'UGA'
end_trans3 = 'UAG'
if ((mrna[0:3]!=start_trans) and (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):
return "Not readable RNA code"
else:
(mrna[0:3]==start_trans) and (mrna [-3:]==end_trans1 or end_trans2 or end_trans3)
length = len(mrna[3:-3])
return length
但是此代码不适用于'AUGAGGCACCUUCUGUGCUCCUUAC'。它返回长度,而不是“不可读”
您想知道最后三个是否与您的end_trans*
相匹配,可以单独指定mrna [-3:]==end_trans1 or mrna [-3:]==end_trans2 or ...
,也可以使用in
。如果只是指定一个字符,例如。 end_trans2 or end_trans3
它将始终为True。
def rna_length(mrna):
start_trans = 'AUG'
end_trans1 = 'UAA'
end_trans2 = 'UGA'
end_trans3 = 'UAG'
if ((mrna[0:3]!=start_trans) and (mrna [-3:] in [end_trans1,end_trans2,end_trans3])):
return "Not readable RNA code"
else:
(mrna[0:3]==start_trans) and (mrna [-3:]==end_trans1 or end_trans2 or end_trans3)
length = len(mrna[3:-3])
return length
我们对其进行测试:
rna_length(mrna)
17
问题出在以下情况:
if ((mrna[0:3]!=start_trans) and (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):
您只需要将and
更改为or
,就像这样:
if ((mrna[0:3]!=start_trans) or (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):
这是由于以下事实:如果RNA代码不是以'AUG'开头,或者代码不是以'UAA','UGA'或'UAG'结尾-这不是有效的RNA代码。
完整代码:
def rna_length(mrna):
start_trans = 'AUG'
end_trans1 = 'UAA'
end_trans2 = 'UGA'
end_trans3 = 'UAG'
if ((mrna[0:3]!=start_trans) or (mrna [-3:]!=end_trans1 or end_trans2 or
end_trans3)):
return "Not readable RNA code"
else:
(mrna[0:3]==start_trans) and (mrna [-3:]==end_trans1 or end_trans2 or
end_trans3)
length = len(mrna[3:-3])
return length
def main():
print(rna_length("AUGAGGCACCUUCUGCUCCUUAC"))
if __name__== "__main__":
main()
输出:
Not readable RNA code