所屬專題:[字符串算法](README.md)
 
## 問題
20個常見的天然氨基酸簡寫為20個大寫英文字母(除了B, J, O, U, X, Z之外的所有大寫英文字母)。蛋白質序列由這20個符號構成。之后的問題里會出現遺傳序列的概念,它包含DNA序列、RNA序列和蛋白質序列。
RNA密碼子表規定了特定的核苷酸三聯密碼子編碼到特定氨基酸的細節:(圖片來源:[Wikipedia](https://zh.wikipedia.org/wiki/%E9%81%97%E4%BC%A0%E5%AF%86%E7%A0%81))
*****
<div align="center"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Aminoacids_table.svg/320px-Aminoacids_table.svg.png"></div>
<div align="center">RNA密碼子表</div>
<div align="center">最內圈為三聯體密碼子第一位堿基,向外一圈為第二位堿基,再向外一圈為第三位堿基,最外圈為三聯體密碼子對應的氨基酸縮寫。</div>
*****
**輸入:** 一條mRNA單鏈序列`$ s $`(長度至多10 kb,均為開放讀碼框區域,無提前終止子)。
**輸出:** `$ s $`編碼的蛋白質序列。
**樣例數據:**
~~~
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
~~~
**樣例輸出:**
~~~
MAMAPRTEINSTRING
~~~
 
## 背景知識
該問題涉及遺傳信息從信使RNA(messenger RNA或mRNA)傳遞到蛋白質的翻譯過程。mRNA每連續三個核苷酸組成一個三聯密碼子,編碼一個氨基酸。絕大多數生物的蛋白質翻譯都遵循問題中的密碼子表。
20個氨基酸縮寫與中文名稱:A: 丙氨酸;C: 半胱氨酸;D: 天冬氨酸;E: 谷氨酸;F: 苯丙氨酸;G: 甘氨酸;H: 組氨酸;I: 異亮氨酸;K: 賴氨酸;L: 亮氨酸;M: 甲硫氨酸;N: 天冬酰胺;P: 脯氨酸;Q: 谷氨酰胺;R: 精氨酸;S: 絲氨酸;T: 蘇氨酸;V: 纈氨酸;W: 色氨酸;Y: 酪氨酸。
詳情請查閱ROSALIND網站上[關于該問題的背景說明](http://rosalind.info/problems/prot/)。
 
## 解答
```
def rna2prot(s):
"""將給定的mRNA序列s翻譯為蛋白質序列(不考慮提前終止子) """
codon_table = dict(UUU='F', CUU='L', AUU='I', GUU='V',
UUC='F', CUC='L', AUC='I', GUC='V',
UUA='L', CUA='L', AUA='I', GUA='V',
UUG='L', CUG='L', AUG='M', GUG='V',
UCU='S', CCU='P', ACU='T', GCU='A',
UCC='S', CCC='P', ACC='T', GCC='A',
UCA='S', CCA='P', ACA='T', GCA='A',
UCG='S', CCG='P', ACG='T', GCG='A',
UAU='Y', CAU='H', AAU='N', GAU='D',
UAC='Y', CAC='H', AAC='N', GAC='D',
UAA='*', CAA='Q', AAA='K', GAA='E',
UAG='*', CAG='Q', AAG='K', GAG='E',
UGU='C', CGU='R', AGU='S', GGU='G',
UGC='C', CGC='R', AGC='S', GGC='G',
UGA='*', CGA='R', AGA='R', GGA='G',
UGG='W', CGG='R', AGG='R', GGG='G')
prot = ''
for i in range(0, len(s), 3):
prot += codon_table[s[i:i+3]]
prot = prot.replace('*', '')
return prot
## --main--
with open("rosalind_prot.txt", 'r') as f1:
s = f1.read().strip()
result = rna2prot(s)
with open("rosalind_prot_out.txt", 'w') as f2:
f2.write(result)
```