欢迎光临散文网 会员登陆 & 注册

【ROSALIND】【练Python,学生信】17 从蛋白质倒推mRNA数目

2019-02-13 15:58 作者:未琢  | 我要投稿

如果第一次阅读本系列文档请先移步阅读【ROSALIND】【练Python,学生信】00 写在前面  谢谢配合~

题目:

从蛋白质倒退mRNA(Inferring mRNA from Protein)

Given: A protein string of length at most 1000 aa.

所给:一条不超过1000个氨基酸的蛋白质序列。

Return: The total number of different RNA strings from which the protein could have been translated, modulo 1,000,000. (Don't neglect the importance of the stop codon in protein translation.)

需得:可以翻译得到该蛋白质的mRNA数目,对1000000取模(别忘了有终止密码子)。

 

测试数据

MA

测试输出

12

 

背景

已知蛋白质序列,可以通过推导编码该序列的mRNA序列来确定编码基因在基因组上的位置。尽管mRNA翻译为蛋白质结果是唯一的,给定蛋白质对应的mRNA却并不唯一,这是因为一个氨基酸往往对应多个密码子。

 

思路

本题只需要把每个氨基酸对应的密码子数量相乘即可,统计完每个氨基酸后取一次模,最后不要忘了终止密码子有三种情况即可。

 

Python知识点

对正整数a和n来说,取模运算a modulo n就是取a除以n的余数。取模运算常用于计算机编程中,因为变量的存储长度通常有限(如Python中int型变量存储的数不能超过2^31,即2,147,483,647),需要借助取模运算来存储和处理大的数据。

若a mod n = b mod n,我们称a、b同余,表示为a ≡ b mod n。

若a ≡ b mod n,且 c ≡ d mod n;则a + c ≡ b + d mod n 且a × c ≡ b × d mod n。

 

代码

codon_table = {

    'GCU':'A', 'GCC':'A', 'GCA':'A', 'GCG':'A', 'CGU':'R', 'CGC':'R',

    'CGA':'R', 'CGG':'R', 'AGA':'R', 'AGG':'R', 'UCU':'S', 'UCC':'S',

    'UCA':'S', 'UCG':'S', 'AGU':'S', 'AGC':'S', 'AUU':'I', 'AUC':'I',

    'AUA':'I', 'UUA':'L', 'UUG':'L', 'CUU':'L', 'CUC':'L', 'CUA':'L',

    'CUG':'L', 'GGU':'G', 'GGC':'G', 'GGA':'G', 'GGG':'G', 'GUU':'V',

    'GUC':'V', 'GUA':'V', 'GUG':'V', 'ACU':'T', 'ACC':'T', 'ACA':'T',

    'ACG':'T', 'CCU':'P', 'CCC':'P', 'CCA':'P', 'CCG':'P', 'AAU':'N',

    'AAC':'N', 'GAU':'D', 'GAC':'D', 'UGU':'C', 'UGC':'C', 'CAA':'Q',

    'CAG':'Q', 'GAA':'E', 'GAG':'E', 'CAU':'H', 'CAC':'H', 'AAA':'K',

    'AAG':'K', 'UUU':'F', 'UUC':'F', 'UAU':'Y', 'UAC':'Y', 'AUG':'M',

    'UGG':'W',

    'UAG':'Stop', 'UGA':'Stop', 'UAA':'Stop'

    }

 

f = open('rosalind_mrna.txt', 'r')

protein = f.read().strip()

f.close()

rna_num = 0

 

for a in  codon_table.values():

    if a == 'Stop':

        rna_num += 1

 

for i in protein:

    pn = 0

    for j in codon_table.values():

        if j == i:

            pn += 1

 

    rna_num = rna_num * pn % 1000000

 

print(rna_num)


【ROSALIND】【练Python,学生信】17 从蛋白质倒推mRNA数目的评论 (共 条)

分享到微博请遵守国家法律