🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
所属专题:[字符串算法](README.md) &emsp; ## 问题 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 ~~~ &emsp; ## 背景知识 该问题涉及遗传信息从信使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/)。 &emsp; ## 解答 ``` 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) ```