我是初学者,我正在写一个简单的Python程序将RNA序列转换为蛋白质密码子。因此,我有一个RNA字符串,我每3个字母(如UUU)取一次,并将其转换为与之相关的蛋白质密码子。因此"UUU“转换为"F","UUA”转换为"L“,依此类推。下面是我的代码:
my_rna="UUAUUGUUUUUC"
my_protein=""
for i in xrange(0,len(my_rna),3):
sub_str = my_rna[i:(i+3)]
print sub_str
if sub_str=="UUU" or "UUC":
my_protein +="F"
elif sub_str=="UUA" or "UUG":
my_protein +="L"
else:
print "No match"
print i
print my_protein
这是输出:
UUA
0
UUG
3
UUU
6
UUC
9
FFFF
所以问题似乎是,对于第一个IF语句,3个RNA字母的每个子串似乎都是真的,所以所有RNA 3个字母集都转换为"F“,即使输出应该是"AAFF"?
有人能告诉我为什么会这样吗?我怎样才能修复它呢?我仔细阅读了一下,在Python语言中比较字符串时,使用==
和is
是有区别的,因为它们在条件中的含义不同,但是我不认为这是问题所在,因为当我尝试用is
替换我的==
时,结果是相同的。
谢谢!
发布于 2014-09-09 14:10:05
这个
if sub_str=="UUU" or "UUC":
应该写成
if sub_str=="UUU" or sub_str=="UUC":
或
if sub_str in ("UUU", "UUC"):
在后者中,括号可以用方括号或大括号代替。由于您的情况没有实际区别,我将不再深入讨论。
你现在所拥有的在语法上是有效的,但并没有做你期望它做的事情。相当于:
if (sub_str=="UUU") or bool("UUC"):
并始终计算为True
(因为bool("UUC")
为True
)。
(所有这些也适用于elif
比较。)
发布于 2014-09-09 14:11:26
问题是:
if sub_str=="UUU" or "UUC":
...
许多初学者常犯的一个错误是认为这意味着“如果sub_str等于"UUU”或“UUC”则继续“。实际上,这实际上意味着‘如果sub_str等于"UUU“或者如果"UUC”计算为真值,则继续“。
由于"UUC“被视为”True“,因此您的第一个”if“语句将始终执行。
您可以通过执行以下任一操作来修复此问题:
if sub_str == "UUU" or sub_str == "UUC":
通过执行以下操作来...or:
if sub_str in ("UUU", "UUC"):
...which是一个很好的捷径。
https://stackoverflow.com/questions/25737683
复制相似问题