Σχεδιάζεις να χτίσεις ένα δεντρόσπιτο στο δάσος κοντά στο σπίτι σου, ώστε να μπορείς να βλέπεις την ανατολή και τη δύση του ήλιου.
Έχεις αποκτήσει δεδομένα από μια τοπική εταιρεία τοπογραφικών μετρήσεων, που δείχνουν το ύψος κάθε δέντρου σε κάθε ορθογώνιο τμήμα του χάρτη. Πρέπει να αναλύσεις κάθε πλέγμα του χάρτη για να βρεις καλά δέντρα για το δεντρόσπιτό σου.
Ένα καλό δέντρο είναι ταυτόχρονα:
Η αποστολή σου είναι να βρεις τα πιθανά δέντρα όπου θα μπορούσες να χτίσεις το δεντρόσπιτό σου.
Η εταιρεία δεδομένων παρέχει τα δεδομένα ως πλέγματα που δείχνουν τα ύψη των δέντρων. Οι γραμμές του πλέγματος αντιπροσωπεύουν την κατεύθυνση ανατολής-δύσης, και οι στήλες αντιπροσωπεύουν την κατεύθυνση βορρά-νότου.
Ένα αποδεκτό δέντρο θα είναι το μεγαλύτερο στη γραμμή του, ενώ ταυτόχρονα το μικρότερο στη στήλη του.
Ένα πλέγμα μπορεί να μην έχει καθόλου καλά δέντρα. Ή μπορεί να έχει ένα, ή ακόμη και αρκετά.
Ορίστε ένα πλέγμα που έχει ακριβώς ένα υποψήφιο δέντρο.
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
Άρα το σημείο στο [2, 1] (γραμμή: 2, στήλη: 1) είναι εξαιρετικό μέρος για ένα δεντρόσπιτο.
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος για να δηλώνεις ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθά σημαντικά στην αποσφαλμάτωση. Σε περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι ενός συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει ακόμα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα.
Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError αν ο matrix είναι μη κανονικός. Τα tests θα περάσουν μόνο αν και κάνεις raise την exception και συμπεριλάβεις ένα μήνυμα μαζί της.
Για να πετάξεις ένα ValueError με ένα μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# if the matrix is irregular
raise ValueError("irregular matrix")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.