Μόλις προσλήφθηκες ως καθηγητής μαθηματικών. Η πρώτη σου εβδομάδα κύλησε καλά, αλλά κάτι δεν πάει καλά τη δεύτερη εβδομάδα. Το πρόβλημα είναι ότι κάθε απάντηση που δίνουν οι φοιτητές σου είναι λανθασμένη! Ευτυχώς, χάρη στις μαθηματικές σου ικανότητες κατάφερες να εντοπίσεις το πρόβλημα: οι απαντήσεις των φοιτητών είναι σωστές, αλλά είναι όλες στη βάση 2 (δυαδικό)! Το εκπληκτικό είναι ότι κάθε εβδομάδα οι φοιτητές χρησιμοποιούν διαφορετική βάση. Για να επαληθεύεις γρήγορα τις απαντήσεις των φοιτητών, θα φτιάξεις ένα εργαλείο μετατροπής μεταξύ βάσεων.
Μετέτρεψε μια ακολουθία ψηφίων σε μία βάση, που αναπαριστά έναν αριθμό, σε μια ακολουθία ψηφίων σε μια άλλη βάση, που αναπαριστά τον ίδιο αριθμό.
Προσπάθησε να υλοποιήσεις εσύ τη μετατροπή. Μην χρησιμοποιήσεις κάτι άλλο για να κάνει τη μετατροπή για σένα.
Στη θεσιακή σημειογραφία, ένας αριθμός σε βάση b μπορεί να κατανοηθεί ως ένας γραμμικός συνδυασμός δυνάμεων του b.
Ο αριθμός 42, σε βάση 10, σημαίνει:
(4 × 10¹) + (2 × 10⁰)
Ο αριθμός 101010, σε βάση 2, σημαίνει:
(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)
Ο αριθμός 1120, σε βάση 3, σημαίνει:
(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)
Ναι. Αυτοί οι τρεις αριθμοί παραπάνω είναι ακριβώς οι ίδιοι. Συγχαρητήρια!
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στο debugging. Σε περιπτώσεις όπου ξέρεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά και πάλι θα πρέπει να συμπεριλάβεις ένα κατατοπιστικό μήνυμα.
Αυτή η άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError για διαφορετικές βάσεις εισόδου και εξόδου. Τα tests θα περάσουν μόνο αν και κάνεις raise το exception και συμπεριλάβεις ένα κατατοπιστικό μήνυμα μαζί του.
Για να πετάξεις ένα ValueError με μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# for input.
raise ValueError("input base must be >= 2")
# another example for input.
raise ValueError("all digits must satisfy 0 <= d < input base")
# or, for output.
raise ValueError("output base must be >= 2")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.