Tu cuerpo está formado por células que contienen ADN. Esas células se desgastan con regularidad y hay que sustituirlas, algo que logran dividiéndose en células hijas. De hecho, el cuerpo humano medio experimenta unas diez mil billones de divisiones celulares a lo largo de la vida.
Cuando las células se dividen, su ADN también se replica. A veces, durante este proceso, se producen errores y piezas individuales de ADN se codifican con la información incorrecta. Si comparamos dos cadenas de ADN y contamos las diferencias entre ellas, podemos ver cuántos errores se produjeron. Esto se conoce como la «distancia de Hamming».
La distancia de Hamming es útil en muchas áreas de la ciencia, no solo en biología, así que es una expresión que merece la pena conocer :)
Calcula la distancia de Hamming entre dos cadenas de ADN.
Leemos el ADN con las letras C, A, G y T. Dos cadenas podrían tener este aspecto:
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
Tienen 7 diferencias y, por tanto, la distancia de Hamming es 7.
La distancia de Hamming solo está definida para secuencias de la misma longitud, así que intentar calcularla entre secuencias de distinta longitud no debería funcionar.
A veces es necesario lanzar una excepción. Cuando lo hagas, deberías incluir siempre un mensaje de error significativo para indicar cuál es el origen del error. Esto hace que tu código sea más legible y ayuda considerablemente a depurar. En situaciones en las que sabes que el origen del error será de un tipo concreto, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.
Este ejercicio en concreto requiere que uses la instrucción raise para «lanzar» un ValueError cuando las hebras que se comprueban no tengan la misma longitud. Las pruebas solo pasarán si tanto lanzas la exception con raise como incluyes un mensaje con ella.
Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:
# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.