<p>我认为将检查终止密码子的内部<code>if</code>逻辑颠倒会更具可读性:</p>
<pre><code>if codon == 'UAA' or codon == 'UGA' or codon == 'UAG':
</code></pre>
<p><strong>但是</strong>将所有可能的结果存储在<code>set</code>中,这样做会更有效,从而使成员身份检查更简单<em>和</em>更快。你知道吗</p>
<p>我的意思是(注意,我还把常量的创建从循环中去掉了):</p>
<pre><code>START_CODONS = {'AUG': 'M',
'GAA': 'E',
'ACC': 'T'}
STOP_CODONS = {'UAA', 'UGA', 'UAG'}
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
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':
if codon in STOP_CODONS:
break
else:
amino_acid = START_CODONS.get(codon, 'X')
protein += amino_acid
print('protein:', protein)
break
</code></pre>
<p>输出:</p>
<pre class="lang-none prettyprint-override"><code>AUG
GAA
UGA
protein: ME
</code></pre>