DNA中的指令转化为氨基酸链

筛选。 我们的细胞经历了一个叫做蛋白质合成的过程,将DNA中的指令转化为氨基酸链,或多肽。

你的工作就是复制这个过程!

第1步:转录

你的输入将是一串DNA,看起来像这样。

"tacagctcgctatgaatc"

然后你必须将其转录为mRNA。每个字母,或碱基,都会被转录。


A -> U
T -> A
G -> C
C -> G
...

此外,你将把它分成三组,或称_codons_

上面的例子会变成。

"AUG UCG AGC GAU ACU UAG"


第2步:翻译

有了mRNA链之后,你将把它变成一个氨基酸链。

每个密码子对应一个氨基酸。

Ala GCU, GCC, GCA, GCG 
Leu UUA, UUG, CUU, CUC, 
CUA, CUG Arg CGU, CGC, 
CGA, CGG, AGA, AGG Lys 
AAA, AAG Asn AAU, AAC 
Met AUG Asp GAU, GAC 
Phe UU, UUC Cys UGU, UGC 
Pro CCU, CCC, CCA, CCG 
Gln CAA, CAG Ser UCU, 
UCC, UCA, UCG, AGU, AGC 
Glu GAA, GAG Thr ACU, 
ACC, ACA, ACG Gly GGU, 
GGC, GGA, GGG Trp UGG 
His CAU, CAC Tyr UAU, 
UAC Ile AUU, AUC, AUA 
Val GUU, GUC, GUA, GUG 
Stop UAG, UGA, UAA
...

唷,这是一个很长的列表!

上面的例子将变成 "Met Ser Ser Thr Asp Stop"

任何不在三组中的额外碱基组都不包括在内。比如说。

"AUG C"将变成 "Met"

总之,你的最终输出将是mRNA序列和多肽。

下面是一些例子

"tacagctcgctatgaatc"

输出

["AUG UCG AGC GAU ACU UAG"
 "Met Ser Ser Asp Thr Stop"

In:

"ACGTG"

输出

["UGC AC""Cys"]

import re

TABLE = str.maketrans('ACGT','UGCA')

def protein_synthesis(dna):
    rna = re.findall(r'.{1,3}', dna.translate(TABLE))
    return ' '.join(rna), ' '.join(x for x in map(CODON_DICT.get, rna) if x)

More details

B={'T':'A','A':'U','G':'C','C':'G'}
A={'Ala':['GCU''GCC''GCA''GCG'],
   'Leu':['UUA''UUG''CUU''CUC''CUA''CUG'],
   'Arg':['CGU''CGC''CGA''CGG''AGA''AGG'],
   'Lys':['AAA''AAG'], 'Asn':['AAU''AAC'],
   'Met':['AUG'], 'Asp':['GAU''GAC'], 'Phe':['UUU''UUC'],
   'Cys':['UGU''UGC'], 'Pro':['CCU''CCC''CCA''CCG'],
   'Gln':['CAA''CAG'], 'Ser':['UCU''UCC''UCA''UCG''AGU''AGC'],
   'Glu':['GAA''GAG'], 'Thr':['ACU''ACC''ACA''ACG'],
   'Gly':['GGU''GGC''GGA''GGG'], 'Trp':['UGG'], 'His':['CAU''CAC'],
   'Tyr':['UAU''UAC'], 'Ile':['AUU''AUC''AUA'],
   'Val':['GUU''GUC''GUA''GUG'], 'Stop':['UAG''UGA''UAA']}

def getAA(s):
    for a in A:
        if s in A[a]: return a
    return 'codon not found'

def protein_synthesis(dna):
    print(dna)
    r,s='',''
    i=0
    c=''
    while i<len(dna):
        c+=B[dna[i]]
        i+=1
        if i%3==0:
            r+=c+' '
            s+=getAA(c)+' '
            c=''
    if len(c)>0: r+=c+' '
    return (r[:-1],s[:-1])

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值