与python比较问题作斗争

2024-06-06 12:40:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python,我们学习指南中的一个问题是评估RNA序列。我没有得到问题所建议的预期输出,我得到了17

代码如下:

####START FUNCTION
def rna_length(mrna);
start_rna = 'AUG';

end_rna1 = 'UGA';
end_rna2 = 'UAA';
end_rna3 = 'UAG';

if (mrna[0:3]==start_rna) and (mrna [-3:]==end_rna1 or end_rna2 or end_rna3):
length = len(mrna[3:-3])
return length
else: ((mrna[0:3]!=start_rna) or (mrna [-3:]!=end_rna1 or end_rna2 or end_rna3))
return "Not readable RNA code"

####END FUNCTION

问题here截图的链接


Tags: orreturnfunction序列startlength建议rna
1条回答
网友
1楼 · 发布于 2024-06-06 12:40:55

问题是您使用布尔运算符or来比较字符串。你可以这样比较:

(mrna [-3:]==end_rna1 or end_rna2 or end_rna3)
(((mrna [-3:]==end_rna1) or end_rna2) or end_rna3)

因为or是一个布尔运算符,所以它需要处理布尔运算。可以使用bool(<str>)将字符串转换为布尔值

(((mrna [-3:]==end_rna1) or bool(end_rna2)) or bool(end_rna3))

任何非空字符串(即任何非""的字符串)都是“truthy”。这意味着bool(non_empty_str) == Truebool('') == False

(((mrna [-3:]==end_rna1) or True) or True)
((True) or True)
(True or True)
True

现在,你应该如何修复它?有几种方法可以做到这一点

  1. 正确使用or

     if (mrna[0:3]==start_rna) and (mrna[-3:]==end_rna1 or mrna[-3:]==end_rna2 or mrna[-3:]==end_rna3):
         length = len(mrna[3:-3])
         return length
     else:
         ((mrna[0:3]!=start_rna) or (mrna[-3:]!=end_rna1 or mrna[-3:]!=end_rna2 or mrna[-3:]!=end_rna3))
         return "Not readable RNA code"
    
  2. 使用集合。请注意,每当您不想修改集合时,使用元组而不是列表是标准的。我在这里使用列表是因为括号看起来不同。您也可以使用集合来加快in,但对于3来说,这太过分了

     if mrna[0:3] == start_rna and mrna[-3:] in [end_rna1, end_rna2, end_rna3]:
         length = len(mrna[3:-3])
         return length
     else:
         (mrna[0:3] != start_rna or mrna[-3:] not in [end_rna1, end_rna2, end_rna3])
         return "Not readable RNA code"
    

见鬼,您甚至可以使用字符串方法str.startswithstr.endswith

    if mrna.startswith(start_rna) and mrna.endswith([end_rna1, end_rna2, end_rna3]):
        length = len(mrna[3:-3])
        return length
    else:
        ...

相关问题 更多 >