求助:用Python实现mRNA序列翻译为氨基酸序列长度
修复后的Python翻译函数及问题解析
原代码核心问题
- 错误将循环索引
i与字符串"AUG"做比较,完全偏离了定位起始密码子的逻辑 - 终止密码子的判断语法错误,
or连接的表达式写法逻辑失效,会导致条件永远成立 - 缺少从起始密码子位置开始逐段读取密码子的有效循环逻辑
- 函数未按要求返回数值,而是直接打印结果
修复后的代码
def Translation(mRNA: str) -> int: # 定位首个AUG的起始索引 start_idx = mRNA.find("AUG") if start_idx == -1: return 0 # 无起始密码子,返回0 count = 0 current_idx = start_idx + 3 # 起始密码子本身编码1个氨基酸,后续从下一个密码子开始遍历 # 逐段读取密码子,直到遇到终止密码子或序列长度不足 while current_idx + 3 <= len(mRNA): codon = mRNA[current_idx:current_idx+3] if codon in {"UAA", "UAG", "UGA"}: break count += 1 current_idx += 3 # 起始密码子对应的氨基酸需计入总数 return count + 1
代码逻辑说明
- 定位起始点:用
str.find()快速找到首个"AUG"的位置,未找到则直接返回0 - 初始化遍历:起始密码子对应1个氨基酸,后续从起始位置+3的索引开始遍历后续密码子
- 循环翻译:每次截取3个核苷酸作为密码子,若为终止密码子则停止循环,否则计数加1并移动索引
- 返回结果:起始密码子的1个氨基酸加上后续计数的数量,即为最终的氨基酸序列长度
测试用例验证
- 输入
"AUGUGA":起始后第一个密码子为终止密码子,返回1,符合预期 - 输入
"ACCUAUGACGUCCUAAGCAGUUUGACG":起始后有2个有效密码子,加起始的1个,总长度3,符合预期 - 输入
"ACCUAUGAUAACCUAAGCAGUUUGACG":同理,有效密码子数+1=3,符合预期 - 输入
"AUGAUGAUGAUGAUGUGAUGAUGAUGA":起始后有4个有效密码子,加起始的1个,总长度5,符合预期
内容的提问来源于stack exchange,提问作者slags
相关产品推荐
相关产品推荐

