python中字符串的比较不起作用

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

我是初学者,正在编写一个简单的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
替换我的
=
时,会出现相同的输出

谢谢

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”,)
中是非常首选的。