Το σώμα σου αποτελείται από κύτταρα που περιέχουν DNA. Αυτά τα κύτταρα φθείρονται τακτικά και χρειάζεται να αντικατασταθούν, κάτι που το καταφέρνουν διαιρούμενα σε θυγατρικά κύτταρα. Στην πραγματικότητα, το μέσο ανθρώπινο σώμα βιώνει περίπου 10 τετράκις εκατομμύρια κυτταρικές διαιρέσεις σε όλη τη διάρκεια της ζωής του!
Όταν τα κύτταρα διαιρούνται, αντιγράφεται και το DNA τους. Μερικές φορές, κατά τη διάρκεια αυτής της διαδικασίας, γίνονται λάθη και μεμονωμένα τμήματα DNA κωδικοποιούνται με λανθασμένες πληροφορίες. Αν συγκρίνουμε δύο κλώνους DNA και μετρήσουμε τις διαφορές μεταξύ τους, μπορούμε να δούμε πόσα λάθη συνέβησαν. Αυτό είναι γνωστό ως "Hamming distance".
Η "Hamming distance" είναι χρήσιμη σε πολλούς τομείς της επιστήμης, όχι μόνο στη βιολογία, οπότε είναι μια ωραία φράση για να την ξέρεις :)
Υπολόγισε την απόσταση Hamming ανάμεσα σε δύο κλώνους DNA.
Διαβάζουμε το DNA χρησιμοποιώντας τα γράμματα C, A, G και T. Δύο κλώνοι μπορεί να μοιάζουν κάπως έτσι:
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
Έχουν 7 διαφορές, και επομένως η απόσταση Hamming είναι 7.
Η απόσταση Hamming ορίζεται μόνο για ακολουθίες ίσου μήκους, οπότε μια προσπάθεια υπολογισμού της ανάμεσα σε ακολουθίες διαφορετικού μήκους δε θα πρέπει να λειτουργεί.
Μερικές φορές χρειάζεται να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, καλό είναι να συμπεριλαμβάνεις πάντα ένα ουσιαστικό μήνυμα σφάλματος που να δείχνει από πού προέρχεται το σφάλμα. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στο debugging. Σε περιπτώσεις όπου ξέρεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά και πάλι θα πρέπει να συμπεριλάβεις ένα ουσιαστικό μήνυμα.
Αυτή η άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError όταν οι κλώνοι που ελέγχεις δεν έχουν το ίδιο μήκος. Οι δοκιμές θα περάσουν μόνο αν πετάξεις με raise την exception και συμπεριλάβεις ένα μήνυμα μαζί της.
Για να πετάξεις ένα ValueError με ένα μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.