python中给定mrna序列上的密码子计数

python中给定mrna序列上的密码子计数,python,python-3.x,bioinformatics,transcription,Python,Python 3.x,Bioinformatics,Transcription,这是我一直尝试使用的代码,但无法正常工作: 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)

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

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

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

代码中没有显示数字。密码子的数目是末端和起始指数之间的差值,底除以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')

如果mrna[x:x+3]在('UAA','UAG','UGA')中,那么生成器
(x,mrna[x:x+3]在范围内(start+3,len(mrna)-3,3)中的x
从索引
开始+3
到结尾遍历所有密码子,并生成与
('UAA','UAG','UGA')
中的任何密码子匹配的密码子以及索引
next
通常返回迭代器的下一个(第一个)元素。对于第二个参数,当迭代器用完时,它返回额外的参数作为哨兵,而不是引发
StopIteration
/
是截断除法运算符,因此即使
len(mrna)
距离
start
不是3的倍数,它也能正常工作。请显示清晰的输入顺序,并标记预期的开始和结束。谢谢!几乎完美,我只是将print(AUG和{last}之间的f'{(end-start)//3}密码子)更改为print(AUG和{last}之间的f'{(end-start)//6}密码子)
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')