python中字符串的比较不起作用
我是初学者,正在编写一个简单的Python程序,将RNA序列转换为蛋白质密码子。所以我有一个RNA字符串,每3个字母(比如UUU)取一个,然后把它转换成与之相关的蛋白质密码子。所以“UUU”转换为“F”,“UUA”转换为“L”,依此类推。这是我的密码:python中字符串的比较不起作用,python,string,compare,Python,String,Compare,我是初学者,正在编写一个简单的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 i
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
替换我的=
时,会出现相同的输出
谢谢
if sub_str=="UUU" or "UUC":
应写为
if sub_str=="UUU" or sub_str=="UUC":
或
在后一种情况下,可以用方括号或大括号替换括号。既然你的情况没有实际的区别,我就不深入讨论了
你现在所拥有的在语法上是有效的,但并没有达到你所期望的效果。这相当于:
if (sub_str=="UUU") or bool("UUC"):
并且总是计算为True
(因为bool(“UUC”)
是True
)
(所有这些也适用于elif
比较。)
if sub_str=="UUU" or "UUC":
应写为
if sub_str=="UUU" or sub_str=="UUC":
或
在后一种情况下,可以用方括号或大括号替换括号。既然你的情况没有实际的区别,我就不深入讨论了
你现在所拥有的在语法上是有效的,但并没有达到你所期望的效果。这相当于:
if (sub_str=="UUU") or bool("UUC"):
并且总是计算为True
(因为bool(“UUC”)
是True
)
(所有这些也适用于elif
比较。)问题在于:
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":
…或通过以下方式:
if sub_str in ("UUU", "UUC"):
…这是一条很好的捷径。问题在于:
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":
…或通过以下方式:
if sub_str in ("UUU", "UUC"):
…这是一个很好的快捷方式。在(“UUU”、“uuc”,)
中是非常首选的。在(“UUU”、“uuc”,)
中是非常首选的。