【问题标题】:Finding the length of RNA given certain conditions using Python使用 Python 在特定条件下查找 RNA 的长度
【发布时间】:2022-02-10 15:39:46
【问题描述】:

我的任务是设计一个识别 RNA 代码长度的函数(不包括起始密码子和终止密码子)。该函数还必须确定它们的代码是否实际有效(必须包含 AUG 作为起始密码子,结尾必须包含 UGA、UAA 或 UAG) 注意:RNA 以起始密码子 AUG 开头,以 UGA、UAA 或 UAG 结尾 如果不满足上述条件,函数必须返回“Not readable RNA code”。

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

但此代码不适用于“AUGAGGCACCUUCUGCUCCUUAC”。它返回长度而不是“不可读”

【问题讨论】:

    标签: python conditional-statements


    【解决方案1】:

    问题出在条件:

    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
    

    【讨论】:

      【解决方案2】:

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

      在您的 IF-Check 中,您要检查是否:

      前三个字母是'AUG'

      mrna[0:3] == start_trans

      如果最后三个字母是“UAA”或“UGA”或“UAG”:

      mrna[-3:] == end_trans1 or end_trans2 or 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"`
      

      【讨论】:

        【解决方案3】:
        def rna_length(mrna):
            length_of_code = len(mrna)
            
            start_codon = mrna[:3]
            stop_codon = mrna[-3:]
            
            if (start_codon == 'AUG' and (stop_codon in ('UAG', 'UAA', 'UGA'))):
                return print(f"rna_length('{mrna}') == {length_of_code - 6}")
            else:
                return "Not readable RNA code"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-15
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-23
          相关资源
          最近更新 更多