你好,我很新的python。我有以下問題: 我想編寫一個腳本,給定一個含有多義性的(dna)序列,寫入所有可能的序列(如果少於100,如果有超過100個可能的序列,則會顯示相應的錯誤消息印) 對於DNA核苷酸歧義:http://www.bioinformatics.org/sms/iupac.html定義了一個返回不同的可能性的循環
實施例:用於序列「AYGH」
腳本的輸出將是「ACGA」, 「ACGC」, 「ACGT」, 「ATGA」, 「ATGC」
,和「ATGT」
。 A,C,G和T是默認的核苷酸。所有其他人可以有不同的價值(見鏈接)。
所以我寫了這一點:
def possible_sequences (seq):
poss_seq = ''
for i in seq:
if i=='A'or i=='C'or i=='G'or i=='T':
poss_seq += i
else:
if i== 'R':
poss_seq += 'A' # OR 'G', how should i implement this?
elif i == 'Y':
poss_seq += 'C' # OR T
elif i == 'S':
poss_seq += 'G' # OR C
elif i == 'W':
poss_seq += 'A' # OR T
elif i == 'K':
poss_seq += 'G' # OR T
elif i == 'M':
poss_seq += 'A' # OR C
elif i == 'B':
poss_seq += 'C' # OR G OR T
elif i == 'D':
poss_seq += 'A' # OR G OR T
elif i == 'H':
poss_seq += 'A' # OR C OR T
elif i == 'V':
poss_seq += 'A' # OR C OR G
elif i == 'N':
poss_seq += 'A' # OR C OR G OR T
elif i == '-' or i == '.':
poss_seq += ' '
return poss_seq
當我測試功能: possible_sequences( 'Â嘗試-C') 我得到:
'ATAC C'
但是我應該得到:
'ATAC C'
'ATAT C'
'ATGC C'
'ATGT C'
有人可以幫我嗎?我明白,我要回顧一下,當有歧義存在,但我不知道怎麼寫了第二poss_seq ...
你只是循環一次。您需要遍歷序列,然後在遇到要更改的字母(即不是A,C,G或T)時,循環遍歷可能的替換。你將不得不嵌套這些循環來獲得所有的排列。 – samb8s
只是一個提示;你可以做'如果我在'RWMDHVN':poss_seq + ='A''而不是寫作多個if-elif的語句 –
是的,那就是'我想說的最後一句話。我明白,但我不知道如何實施它? –