DNA序列转蛋白质时如何从ATG启动翻译直到终止密码子出现
DNA开放阅读框转蛋白质程序实现方案
核心需求
- 读取包含DNA序列的文件,将开放阅读框翻译为蛋白质数据
- 检测到起始密码子
ATG时启动翻译流程 - 遇到
TAG、TAA、TGA任意一种终止密码子时立即停止翻译
原有代码问题梳理
- 仅拆分了三种不同移码的阅读框序列,未实现「从起始密码子启动、终止密码子停止」的翻译逻辑
- 条件判断语法错误:
if elements in DNAlist2 == 'TAG' or 'TAA' or 'TGA'写法不符合Python语法规则,无法正确识别终止密码子 - 未定义
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
相关产品推荐
相关产品推荐

