Δεδομένων των θέσεων δύο βασιλισσών σε μια σκακιέρα, δείξε αν είναι τοποθετημένες με τρόπο που να μπορούν να επιτεθούν η μία στην άλλη.
Στο σκάκι, μια βασίλισσα μπορεί να επιτεθεί σε κομμάτια που βρίσκονται στην ίδια γραμμή, στήλη ή διαγώνιο.
Μια σκακιέρα μπορεί να αναπαρασταθεί με έναν πίνακα 8 επί 8.
Έτσι, αν σου πουν ότι η λευκή βασίλισσα βρίσκεται στο c5 (με μηδενική αρίθμηση: στήλη 2, γραμμή 3) και η μαύρη βασίλισσα στο f2 (με μηδενική αρίθμηση: στήλη 5, γραμμή 6), τότε ξέρεις ότι η διάταξη είναι η εξής:
Μπορείς επίσης να απαντήσεις αν οι βασίλισσες μπορούν να επιτεθούν η μία στην άλλη. Σε αυτή την περίπτωση, η απάντηση θα ήταν ναι, μπορούν, επειδή και τα δύο κομμάτια μοιράζονται μια διαγώνιο.
Η εικόνα της σκακιέρας φτιάχτηκε από τον habere-et-dispertire με LaTeX και το πακέτο chessboard του Ulrike Fischer.
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατανοητό μήνυμα σφάλματος που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικα σου πιο ευανάγνωστο και βοηθάει σημαντικά στον εντοπισμό σφαλμάτων. Σε περιπτώσεις όπου ξέρεις ότι η πηγή του σφάλματος θα είναι κάποιου συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει και πάλι να συμπεριλάβεις ένα κατανοητό μήνυμα.
Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις την εντολή raise για να "πετάξεις" ValueErrors αν στον κατασκευαστή Queen περαστούν αρνητικοί αριθμοί ή αριθμοί που δεν είναι έγκυρη γραμμή ή στήλη. Τα tests θα περάσουν μόνο αν κάνεις raise την exception και συμπεριλάβεις και ένα μήνυμα μαζί της. Θα πρέπει επίσης να κάνεις raise ένα ValueError αν και οι δύο βασίλισσες που περνιούνται στη μέθοδο can_attack() βρίσκονται στην ίδια θέση.
Για να κάνεις raise ένα ValueError με μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# if the row parameter is negative
raise ValueError("row not positive")
# if the row parameter is not on the defined board
raise ValueError("row not on board")
# if the column parameter is negative
raise ValueError("column not positive")
# if the column parameter is not on the defined board
raise ValueError("column not on board")
# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.