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

求助:用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

代码逻辑说明

  1. 定位起始点:用str.find()快速找到首个"AUG"的位置,未找到则直接返回0
  2. 初始化遍历:起始密码子对应1个氨基酸,后续从起始位置+3的索引开始遍历后续密码子
  3. 循环翻译:每次截取3个核苷酸作为密码子,若为终止密码子则停止循环,否则计数加1并移动索引
  4. 返回结果:起始密码子的1个氨基酸加上后续计数的数量,即为最终的氨基酸序列长度

测试用例验证

  • 输入"AUGUGA":起始后第一个密码子为终止密码子,返回1,符合预期
  • 输入"ACCUAUGACGUCCUAAGCAGUUUGACG":起始后有2个有效密码子,加起始的1个,总长度3,符合预期
  • 输入"ACCUAUGAUAACCUAAGCAGUUUGACG":同理,有效密码子数+1=3,符合预期
  • 输入"AUGAUGAUGAUGAUGUGAUGAUGAUGA":起始后有4个有效密码子,加起始的1个,总长度5,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:55:17