Rosalind 018 Open Reading Frames

背景:

        在“ Transcribing DNA into RNA”中,我们讨论了DNA转录为RNA,在" “Translating RNA into Protein"中,我们研究了 将RNA翻译成氨基酸链以构建蛋白质。 我们可以将这两个过程视为一个步骤,我们直接翻译 DNA串变成蛋白质串,因此需要DNA密码子表

        然而,当我们试图直接从 DNA到蛋白质。首先,并非所有DNA都会转录成RNA: 所谓的垃圾DNA似乎对细胞功能没有实际用途。 其次,我们可以在沿RNA的任何位置开始翻译, 这意味着DNA链的任何子链都可以作为翻译的模板, 只要它以起始密码子开头,以终止密码子结束, 并且中间没有其他终止密码子。参见图1。 因此,相同的RNA链实际上可以用三种不同的方式翻译, 取决于我们如何将符号的三元组分组为密码子。比如...AUGCUGAC... 可以被阅读为...AUGCUG...,或 ...UGCUGA...或...GCUGAC...;两条链都可以作为模板链,因此还需要得到原序列的反向互补序列,以同样的思路得到另外三种阅读方式。

https://rosalind.info/problems/orf/

问题:

给出一串不超过1kbp的DNA序列。

返回每个不同的候选蛋白质链。 字符串可以按任意顺序返回。

示例:

Input:

>Rosalind_99
AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG

output:

MLLGSFRLIPKETLIQVAGSSPCNLS
M
MGMTPRLGLESLLE
MTPRLGLESLLE

代码:

import re
from method import fasta
name_list,value_list = fasta('文件所在位置')
dna = value_list[0]
"""
dna = 'AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG'
"""
dna_codon_table = {
    "TTT":"F", "CTT":"L", "ATT":"I", "GTT":"V",
    "TTC":"F", "CTC":"L", "ATC":"I", "GTC":"V",
    "TTA":"L", "CTA":"L", "ATA":"I", "GTA":"V",
    "TTG":"L", "CTG":"L", "ATG":"M", "GTG":"V",
    "TCT":"S", "CCT":"P", "ACT":"T", "GCT":"A",
    "TCC":"S", "CCC":"P", "ACC":"T", "GCC":"A",
    "TCA":"S", "CCA":"P", "ACA":"T", "GCA":"A",
    "TCG":"S", "CCG":"P", "ACG":"T", "GCG":"A",
    "TAT":"Y", "CAT":"H", "AAT":"N", "GAT":"D",
    "TAC":"Y", "CAC":"H", "AAC":"N", "GAC":"D",
    "TAA":"STOP", "CAA":"Q", "AAA":"K", "GAA":"E",
    "TAG":"STOP", "CAG":"Q", "AAG":"K", "GAG":"E",
    "TGT":"C", "CGT":"R", "AGT":"S", "GGT":"G",
    "TGC":"C", "CGC":"R", "AGC":"S", "GGC":"G",
    "TGA":"STOP", "CGA":"R", "AGA":"R", "GGA":"G",
    "TGG":"W", "CGG":"R", "AGG":"R", "GGG":"G"
}                                                                  #DNA密码子表

com = { "A" : "T", "T" : "A", "C" : "G", "G" : "C"}
Reversed_dna = ''
for i in dna[::-1]:
    Reversed_dna+=com[i]                    #得到DNA的反向互补序列

windows = re.compile(r'(?=(ATG(?:...)*?)(?=TAA|TAG|TGA))')   #重视正则表达式的学习
seq = []
for i in re.findall(windows, dna):           #将符合要求的DNA序列加入列表
    if i not in seq:
        seq.append(i)
for i in re.findall(windows,Reversed_dna):   #将符合要求的DNA反向互补序列加入列表
    if i not in seq:
        seq.append(i)
for i in seq:                              #将符合要求的序列翻译成蛋白质序列
    res = ''
    for j in range(0, len(i) - 2, 3):
        res += dna_codon_table[i[j:j + 3]]
    print(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值