Στο μυστικιστικό χωριό Coinholt, στέκεσαι πίσω από τον πάγκο του αρτοποιείου σου, τακτοποιώντας μια φρέσκια παρτίδα αρτοσκευασμάτων. Η πόρτα τρίζει καθώς ανοίγει, και μπαίνει μέσα η Denara, μια ικανή έμπορος με μάτι που ξεχωρίζει τα ποιοτικά προϊόντα. Μετά από ένα γρήγορο γεύμα, γλιστράει ένα αστραφτερό νόμισμα πάνω στον πάγκο, που αντιστοιχεί σε αξία 100 μονάδων.
Χαμογελάς, παίρνεις το νόμισμα και ρίχνεις μια ματιά στο συνολικό κόστος του γεύματος: 88 μονάδες. Αυτό σημαίνει ότι πρέπει να επιστρέψεις 12 μονάδες ρέστα.
Η Denara απλώνει το χέρι της περιμένοντας. "Δώσε μου απλώς τα λιγότερα νομίσματα", λέει με ένα χαμόγελο. "Το πουγκί μου είναι ήδη γεμάτο, και δε θέλω να ρισκάρω να τα χάσω στον δρόμο."
Ξέρεις ότι έχεις μερικές επιλογές. "Έχουμε Lumis (αξίας 10 μονάδων), Viras (αξίας 5 μονάδων) και Zenth (αξίας 2 μονάδων) διαθέσιμα για ρέστα."
Υπολογίζεις γρήγορα τις πιθανότητες στο μυαλό σου:
"Η καλύτερη επιλογή είναι δύο νομίσματα: ένα Lumis και ένα Zenth", λες, δίνοντάς της τα ρέστα.
Η Denara χαμογελάει, φανερά εντυπωσιασμένη. "Όπως πάντα, έχεις δίκιο."
Προσδιόρισε τον μικρότερο αριθμό κερμάτων που πρέπει να δώσεις σε έναν πελάτη, ώστε το άθροισμα των αξιών τους να ισούται με το σωστό ποσό των ρέστων.
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος για να δείξεις ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθά σημαντικά στην αποσφαλμάτωση. Για περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει ακόμα να συμπεριλάβεις ένα κατατοπιστικό μήνυμα.
Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError όταν δεν μπορεί να γίνει η αλλαγή με τα κέρματα που δίνονται. Τα τεστ θα περάσουν μόνο αν και κάνεις raise την exception και συμπεριλάβεις ένα μήνυμα μαζί της.
Για να πετάξεις ένα ValueError με ένα μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.