Flower Field είναι μια τρυφερή επανεπινόηση του δημοφιλούς παιχνιδιού Ναρκαλιευτής. Σκοπός του παιχνιδιού είναι να βρεις όλα τα λουλούδια στον κήπο χρησιμοποιώντας αριθμητικές υποδείξεις που δείχνουν πόσα λουλούδια βρίσκονται ακριβώς δίπλα (οριζόντια, κάθετα, διαγώνια) σε ένα τετράγωνο. Το "Flower Field" κυκλοφόρησε σε περιφερειακές εκδόσεις των Microsoft Windows στην Ιταλία, τη Γερμανία, τη Νότια Κορέα, την Ιαπωνία και την Ταϊβάν.
Η αποστολή σου είναι να προσθέσεις πλήθη λουλουδιών στα κενά τετράγωνα ενός ολοκληρωμένου κήπου Flower Field.
Ο ίδιος ο κήπος είναι ένα ορθογώνιο ταμπλό που αποτελείται από τετράγωνα, τα οποία είναι είτε κενά (' ') είτε ένα λουλούδι ('*').
Για κάθε κενό τετράγωνο, μέτρησε τον αριθμό των λουλουδιών που βρίσκονται δίπλα του (οριζόντια, κάθετα, διαγώνια). Αν το κενό τετράγωνο δεν έχει γειτονικά λουλούδια, άφησέ το κενό. Διαφορετικά, αντικατέστησέ το με το πλήθος των γειτονικών λουλουδιών.
Για παράδειγμα, μπορεί να λάβεις ένα ταμπλό 5 x 4 σαν αυτό (εδώ τα κενά αναπαρίστανται με τον χαρακτήρα '·' για να φαίνονται στην οθόνη):
·*·*·
··*··
··*··
·····
Το οποίο ο κώδικάς σου πρέπει να μετατρέψει σε αυτό:
1*3*1
13*31
·2*2·
·111·
Μερικές φορές χρειάζεται να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα ουσιαστικό μήνυμα σφάλματος που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στο debugging. Σε περιπτώσεις που ξέρεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά και πάλι θα πρέπει να συμπεριλάβεις ένα ουσιαστικό μήνυμα.
Η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ένα ValueError όταν η συνάρτηση board() δεχθεί εσφαλμένη είσοδο. Τα tests θα περάσουν μόνο αν κάνεις raise την exception και συμπεριλάβεις και ένα μήνυμα μαζί της.
Για να πετάξεις ένα ValueError με μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Εξερευνούμε τους εμφωλευμένους βρόχους `for`, την έξυπνη χρήση των min/max για την απλοποίηση του ελέγχου ορίων, τα functional pipelines και τη χρήση δισδιάστατων πινάκων.