![](/img/trans.png)
[英]Python ```while``` loop for comparing strings not working as it should be
[英]my comparing of strings in python not working
我是初學者,我正在編寫一個簡單的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
因此問題似乎是3個RNA字母的每個子串似乎對於第一個IF語句都是正確的,因此即使輸出應為“ AAFF”,所有3個RNA字母集都轉換為“ F”?
誰能告訴我這是為什么,我該如何解決? 我看了四周,有使用之間的差異==
並且is
在Python比較字符串時,因為他們中的條件意味着不同的事情,但我不認為這是問題,因為當我試圖取代我的==
與is
,在發生相同的輸出。
謝謝!
該
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
比較。)
問題是這樣的:
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"):
...這是一個不錯的捷徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.