【发布时间】:2019-07-31 20:04:44
【问题描述】:
我正在尝试编写一个程序,该程序遍历一串 RNA 碱基,找到起始密码子('AUG'),将以下密码子分组(即'GAA','ACC'),查找相应的字典中的氨基酸,创建一个包含生成的氨基酸的字符串,并继续运行,直到它遇到一个终止密码子('UAA','UGA','UAG')。 RNA 以三组的形式读取,从起始密码子开始,到终止密码子结束。
问题是当我想让程序检查它是否命中了三个终止密码子之一时,如果我将所有三个密码子都列在同一个 if 语句中,它就不起作用。检查字典时,它将终止密码子视为未知(.get(codon, 'X'))并将其列为蛋白质中的“X”:
a_seq = 'AAAAUGGAAUGAACC'
kmer_size = 3
for start in range (0,len(a_seq)- kmer_size+1,1):
kmer = a_seq[start:start+kmer_size]
if kmer == 'AUG':
start_codon = a_seq.index(kmer)
new_seq = a_seq[start_codon:]
last_codon_start = len(new_seq) - 2
dictionary = {'AUG':'M',
'GAA':'E',
'ACC':'T'}
protein = ''
for start in range(0, last_codon_start, 3):
codon = new_seq[start:start+3]
print(codon)
if codon != 'UAA' or codon != 'UGA' or codon != 'UAG':
amino_acid = dictionary.get(codon,'X')
protein += amino_acid
else:
break
print(protein)
break
输出:
AUG
GAA
UAA
ACC
MEXT
如果我只列出一个终止密码子,那么它可以工作:
if codon != 'UAA':
AUG
GAA
UAA
ME
两种蛋白质都应该是“ME”。我希望它一旦碰到三个终止密码子中的任何一个就会停止。我的 if 语句有什么问题?
【问题讨论】:
-
你应该使用
and,而不是or。在您当前的状态下,所有变体都是允许的。
标签: python bioinformatics