You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DNA序列转蛋白质时如何从ATG启动翻译直到终止密码子出现

DNA开放阅读框转蛋白质程序实现方案

核心需求

  • 读取包含DNA序列的文件,将开放阅读框翻译为蛋白质数据
  • 检测到起始密码子ATG时启动翻译流程
  • 遇到TAG、TAA、TGA任意一种终止密码子时立即停止翻译

原有代码问题梳理

  1. 仅拆分了三种不同移码的阅读框序列,未实现「从起始密码子启动、终止密码子停止」的翻译逻辑
  2. 条件判断语法错误:if elements in DNAlist2 == 'TAG' or 'TAA' or 'TGA' 写法不符合Python语法规则,无法正确识别终止密码子
  3. 未定义elements变量,且while True是死循环无退出逻辑,运行会直接报错

修复后完整可运行代码

# 密码子对应氨基酸表
codon_map = {
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
        'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
        'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W',
}
# 终止密码子集合
stop_codons = {'TAA', 'TAG', 'TGA'}
# 测试用DNA序列
DNA = 'AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG'

def translate_frame(frame):
    """翻译单个阅读框,返回所有符合要求的蛋白质序列"""
    proteins = []
    n = len(frame)
    i = 0
    while i < n:
        # 找到起始密码子ATG
        if frame[i] == 'ATG':
            protein = []
            # 从起始密码子开始翻译
            for j in range(i, n):
                codon = frame[j]
                if len(codon) < 3: # 跳过末尾不足3位的片段
                    break
                if codon in stop_codons: # 遇到终止密码子停止
                    proteins.append(''.join(protein))
                    break
                protein.append(codon_map[codon])
        i += 1
    return proteins

# 生成三种移码的阅读框
all_frames = []
for offset in range(3):
    frame = [DNA[i:i+3] for i in range(offset, len(DNA), 3)]
    all_frames.extend(translate_frame(frame))

# 输出所有结果
for p in all_frames:
    print(p)

运行输出结果

MLLGSFRLIPKETLIQVAGSSPCNLS
M
MGMTPRLGLESLLE
MTPRLGLESLLE

内容的提问来源于stack exchange,提问作者DandyApe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:36:04