我是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岁的孩子可以对它进行编码:/我四处研究过,但一点运气都没有。所以我感谢你抽出时间来阅读我的愚蠢问题。
在python中,
true
不是关键字,而是True
。在python中,您不必将变量与
True
进行比较,显然,只需使用第一件事:是
True
而不是true
。第二件事:不要说
endswith == True
,只要说endswith
。第三件事:
and
比or
具有更高的优先级,因此您编写的内容相当于:你不是这个意思。
第四件事:最好说:
正如蒂姆指出的,
DNA.endswith(('TAA', 'TAG', 'TGA'))
比DNA[-3:] in ...
强。它更简单,不用费心测试,我希望它也更快。如果有很多允许长度相等的端点,并且正在执行许多测试,那么构造一次set
并对结束切片执行in
测试会更快。但有三种可能性并不是“很多”。更简单:
将布尔值与
True
或False
进行比较几乎总是多余的,因此每当您发现自己这样做时。。。做些别的事情;-)相关问题 更多 >
编程相关推荐