首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挣扎于蟒蛇的比较问题

挣扎于蟒蛇的比较问题
EN

Stack Overflow用户
提问于 2021-08-24 13:39:57
回答 1查看 69关注 0票数 0

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

以下是代码:

代码语言:javascript
复制
####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

指向问题这里屏幕截图的链接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 14:17:46

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

代码语言:javascript
复制
(mrna [-3:]==end_rna1 or end_rna2 or end_rna3)
(((mrna [-3:]==end_rna1) or end_rna2) or end_rna3)

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

代码语言:javascript
复制
(((mrna [-3:]==end_rna1) or bool(end_rna2)) or bool(end_rna3))

任何不为空的字符串。任何不是""的字符串都是“真实的”。这意味着bool(non_empty_str) == Truebool('') == False

代码语言:javascript
复制
(((mrna [-3:]==end_rna1) or True) or True)
((True) or True)
(True or True)
True

现在,你该怎么解决呢?有几种方法可以解决这个问题。

  1. 正确使用or。 如果(mrna0:3==start_rna)和(mrna-3:=end_ RNA 1或mrna-3:=end_RNA 2或mrna-3:=end_RNA 3):length =len(mrna 3:-3)返回长度:(mrna 0:3!=start_rna)或(mrna-3:=end_rna1或mR-3:=end_rna2或mrna-3:!=end_rna3))返回“不可读的RNA代码”
  2. 使用一个集合。注意,当您不想修改集合时,使用元组而不是列表是标准的。我在这里使用列表,因为括号看起来不一样。您也可以使用sets来加快in,但这对于3来说太过了。 如果mrna 0:3 == start_rna和mrna-3: in end_rna1,end_rna2,end_rna3: end_rna2=len(mrna 3:-3)返回长度(mrna 0:3 != start_rna或mrna-3: not in end_rna1,end_rna2,end_rna3)返回“不可读的RNA代码”。

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

代码语言:javascript
复制
    if mrna.startswith(start_rna) and mrna.endswith([end_rna1, end_rna2, end_rna3]):
        length = len(mrna[3:-3])
        return length
    else:
        ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68908705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档