from collections import Counter


# Não faz verificação final
def contacodon_sem_verificacao(seq):
    stops = ["TAA", "TAG", "TGA"]
    count = Counter()
    for i in range(seq.find('ATG'), len(seq) + 1, 3):
        codon = seq[i: i + 3]
        count.update([codon])
        if codon in stops:
            break
    return dict(count)


# Faz verificação final
def contacodon_com_verificacao(seq):
    stops = ["TAA", "TAG", "TGA"]
    count = Counter()
    for i in range(seq.find('ATG'), len(seq) + 1, 3):
        codon = seq[i: i + 3]
        count.update([codon])
        if codon in stops:
            break
        if len(codon) != 3:
            # Retorna um dicionário vazio, uma outra opção seria lançar um erro.
            return {}
    return dict(count)


# Repare que não tem códon de finalização e o último grupo tem apenas 2 caracteres.
seq = "GCGATCGAGATGAGCATCGCATCGCGGACTACCGCGCGCGCGCGCGGGAG"

print("Sem verificação:", contacodon_sem_verificacao(seq))
print("Com verificação", contacodon_com_verificacao(seq))
