使用Python查找给定条件下的RNA长度

使用Python查找给定条件下的RNA长度,python,conditional-statements,Python,Conditional Statements,我的任务是设计一个识别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

我的任务是设计一个识别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

但这段代码不适用于“augaggcaccucucuac”。它返回长度而不是“不可读”

问题在于:

if ((mrna[0:3]!=start_trans) and (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):
您只需将
更改为
,如下所示:

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

我认为您的代码中有一个逻辑错误:

在“如果检查”中,您要检查是否:

前三个字母是“AUG”

mrna[0:3]==start\u trans

如果最后三个字母是‘UAA’或‘UGA’或‘UAG’:

mrna[-3::][=end_trans1或end_trans2或end_trans3

如果两者都为真,则应返回长度。 因此,如果一个是假的,我们应该得到错误

因此,您的if检查应为:

if (mrna[0:3] != start_trans) or (mrna[-3:] != end_trans1 or end_trans2 or end_trans3):

    return "Not readable RNA code"
对于更短的IF支票,我们将其写入:

end_trans = ['UAA', 'UGA', 'UAG']

if not (mrna[0:3] == start_trans or mrna[-3:] in end_trans):
    return "Not readable RNA code"`