以in-if语句结尾和开头:Python 3

2024-05-15 23:03:22 发布

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

我是python新手,我必须创建一个程序来验证DNA序列。 (关于DNA序列的背景非常迅速) 为了有效: •字符数可被3整除 •前3个字符是ATG •最后3个字符是TAA、TAG或TGA。

我的问题是在if语句中使用布尔术语。

        endswith=(DNA.endswith("TAA"))
endswith2=(DNA.endswith("TAG"))
endswith3=(DNA.endswith("TGA"))
if length%3==0 and startswith==true and endswith==true or endswith2==true or endswith3==true:
    return ("true")

此代码返回以下错误: 未定义全局名称“true”

我该如何解决这个问题,最后一点我很抱歉。 这个问题的答案可能是如此愚蠢的简单,以至于在你的脑海中,一个2岁的孩子可以对它进行编码:/我四处研究过,但一点运气都没有。所以我感谢你抽出时间来阅读我的愚蠢问题。


Tags: orand程序trueiftag序列dna
3条回答

在python中,true不是关键字,而是True

在python中,您不必将变量与True进行比较,显然,只需使用

if length%3==0 and startswith and endswith or endswith2 or endswith3:

第一件事:是True而不是true

第二件事:不要说endswith == True,只要说endswith

第三件事:andor具有更高的优先级,因此您编写的内容相当于:

(length%3==0 and startswith==true and endswith==true) or ...

你不是这个意思。

第四件事:最好说:

if len(DNA) % 3 == 0 and DNA.startswith('ATG') and DNA[-3:] in ('TAA', 'TAG', 'TGA'):

正如蒂姆指出的,DNA.endswith(('TAA', 'TAG', 'TGA'))DNA[-3:] in ...强。它更简单,不用费心测试,我希望它也更快。如果有很多允许长度相等的端点,并且正在执行许多测试,那么构造一次set并对结束切片执行in测试会更快。但有三种可能性并不是“很多”。

更简单:

return (len(DNA) % 3 == 0 and
        DNA.startswith("ATG") and
        DNA.endswith(("TAA", "TAG", "TGA")))

将布尔值与TrueFalse进行比较几乎总是多余的,因此每当您发现自己这样做时。。。做些别的事情;-)

相关问题 更多 >