c

codeye

V1

2022/10/03阅读:17主题:默认主题

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])

分类:

后端

标签:

后端

作者介绍

c
codeye
V1