首页 > 解决方案 > python中给定mrna序列的密码子计数

问题描述

这是我一直在尝试使用但无法正常工作的代码:

mrna = input("Please enter mRNA sequence: ")
start = mrna.find('AUG')
if start != -1:
    while start + 2 < len(mrna):
        codon = mrna[start:start + 3]
        if codon == "UAA": 
            break
        print(codon)
        start += 3

预期起始密码子:AUG

预期的终止密码子:UAAUAGUGA 如果例如:

input = "AUGUGA"
output = 1

input = "GAGAUGUUGGUUUAA"
output = 3

我真的不知道出了什么问题。

标签: pythonpython-3.xbioinformaticstranscription

解决方案


您没有在代码中的任何地方显示数字。密码子的数量是结束索引和开始索引之间的差,下限除以 3。

您可以使用生成器来帮助您检查密码子。

mrna = input("Please enter mRNA sequence: ")
start = mrna.find('AUG')
if start != -1:
    end, last = next((x, mrna[x:x + 3] for x in range(start + 3, len(mrna) - 3, 3) if mrna[x:x + 3] in ('UAA', 'UAG', 'UGA')), (len(mrna), 'end'))
    print(f'{(end - start) // 3} codons between AUG and {last}')
else:
    print('AUG not found')

生成器(x, mrna[x:x + 3] for x in range(start + 3, len(mrna) - 3, 3) if mrna[x:x + 3] in ('UAA', 'UAG', 'UGA'))遍历从索引start + 3到末尾的所有密码子,并生成与索引中的任何内容匹配的密码子('UAA', 'UAG', 'UGA')next通常返回迭代器的下一个(第一个)元素。使用第二个参数,它将额外参数作为哨兵返回,而不是StopIteration在迭代器用完时引发 a。//是截断除法运算符,因此即使len(mrna)不是 3 的倍数,它也能正常工作start


推荐阅读