Il tuo corpo è fatto di cellule che contengono il DNA. Queste cellule si usurano regolarmente e devono essere sostituite: ci riescono dividendosi in cellule figlie. Anzi, il corpo umano medio va incontro a circa 10 milioni di miliardi di divisioni cellulari nel corso della vita!
Quando le cellule si dividono, si replica anche il loro DNA. A volte, durante questo processo, capita qualche errore e singoli pezzi di DNA vengono codificati con l'informazione sbagliata. Se confrontiamo due filamenti di DNA e contiamo le differenze tra loro, possiamo vedere quanti errori si sono verificati. Questa grandezza è nota come «distanza di Hamming».
La distanza di Hamming è utile in molti ambiti della scienza, non solo in biologia: è quindi una bella espressione da conoscere :)
Calcola la distanza di Hamming tra due filamenti di DNA.
Il DNA si legge usando le lettere C, A, G e T. Due filamenti potrebbero apparire così:
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
Hanno 7 differenze, quindi la distanza di Hamming è 7.
La distanza di Hamming è definita solo per sequenze di uguale lunghezza: calcolarla tra sequenze di lunghezza diversa non dovrebbe funzionare.
A volte è necessario sollevare un'eccezione. Quando lo fai, includi sempre un messaggio di errore significativo che indichi qual è la fonte dell'errore. Così il codice è più leggibile e il debug diventa molto più semplice. Se sai che la fonte dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore integrati, ma includi comunque un messaggio significativo.
Questo esercizio in particolare richiede di usare l'istruzione raise per «sollevare» un ValueError quando i filamenti controllati non hanno la stessa lunghezza. I test passeranno solo se userai raise per sollevare l'exception e ci alleghi anche un messaggio.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:
# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.