Hamming

Hamming

Fácil

Introdução

O teu corpo é feito de células que contêm DNA. Essas células desgastam-se regularmente e precisam de ser substituídas, o que conseguem ao dividir-se em células-filhas. De facto, o corpo humano médio passa por cerca de dez mil biliões de divisões celulares ao longo da vida!

Quando as células se dividem, o seu DNA também se replica. Por vezes, durante este processo, acontecem erros e pequenas partes de DNA ficam codificadas com a informação incorreta. Se compararmos duas cadeias de DNA e contarmos as diferenças entre elas, conseguimos ver quantos erros ocorreram. É a isto que se chama a "distância de Hamming".

A distância de Hamming é útil em muitas áreas da ciência, não só na biologia, por isso é uma expressão que vale a pena conheceres :)

Instruções

Calcula a distância de Hamming entre duas cadeias de ADN.

Lemos o ADN através das letras C, A, G e T. Duas cadeias podem ter este aspeto:

GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^  ^ ^    ^^

Têm 7 diferenças e, por isso, a distância de Hamming é 7.

Notas de implementação

A distância de Hamming só está definida para sequências de igual comprimento. Por isso, não deve ser possível calculá-la entre sequências com comprimentos diferentes.

Mensagens de exceção

Por vezes é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso na depuração. Nas situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError quando as cadeias que estão a ser verificadas não tiverem o mesmo comprimento. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:

# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Hamming?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.