Σε αυτή την άσκηση, θα υλοποιήσεις ένα πρόγραμμα που προσδιορίζει την κατάσταση ενός παιχνιδιού tic-tac-toe. (Μπορεί επίσης να το ξέρεις ως "noughts and crosses" ή "Xs and Os".)
Το παιχνίδι παίζεται σε πλέγμα 3×3.
Οι παίκτες παίζουν εναλλάξ, τοποθετώντας X και O στο πλέγμα.
Το παιχνίδι τελειώνει όταν ένας παίκτης κερδίσει βάζοντας τρία σημάδια στη σειρά, σε μια στήλη ή σε μια διαγώνιο του πλέγματος, ή όταν γεμίσει ολόκληρο το πλέγμα.
Σε αυτή την άσκηση, θα υποθέσουμε ότι ξεκινάει το X.
Δική σου δουλειά είναι να προσδιορίσεις σε ποια κατάσταση βρίσκεται ένα δεδομένο παιχνίδι.
Υπάρχουν 3 πιθανές καταστάσεις του παιχνιδιού:
Αν το ταμπλό που δίνεται δεν είναι έγκυρο, πέτα ένα κατάλληλο σφάλμα.
Ένα ταμπλό δεν είναι έγκυρο αν ισχύουν οι παρακάτω συνθήκες:
X). | |
X | |
___|___|___
| |
| X | O
___|___|___
| |
O | X |
| |
| |
X | O | X
___|___|___
| |
X | X | O
___|___|___
| |
O | X | O
| |
| |
X | X | X
___|___|___
| |
| O | O
___|___|___
| |
| |
| |
| |
O | O | X
___|___|___
| |
| |
___|___|___
| |
| |
| |
| |
X | X | X
___|___|___
| |
O | O | O
___|___|___
| |
| |
| |
Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα κατατοπιστικό μήνυμα σφάλματος για να δείχνεις ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στην αποσφαλμάτωση. Σε περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά θα πρέπει ακόμα να συμπεριλάβεις ένα κατατοπιστικό μήνυμα.
Ένα έγκυρο παιχνίδι Tic Tac Toe τελειώνει όταν ένας παίκτης κερδίσει.
Αν και οι δύο παίκτες βρίσκονται σε νικηφόρα κατάσταση, αυτή η άσκηση περιμένει να χρησιμοποιήσεις την εντολή raise και να "πετάξεις" ένα ValueError στη λύση σου.
Ο κώδικάς σου επίσης αναμένεται να πετάξει ένα ValueError αν ένας παίκτης κριθεί ότι παίζει δύο γύρους στη σειρά, ή παίζει την πρώτη κίνηση ενώ του είχε ανατεθεί να παίξει τη δεύτερη κίνηση.
Για να πετάξεις ένα ValueError με ένα μήνυμα, γράψε το μήνυμα ως όρισμα στον τύπο exception:
# Example when player O goes before player X.
raise ValueError("Wrong turn order: O started")
# Example when player X goes twice.
raise ValueError("Wrong turn order: X went twice")
# Example when player X wins AND player O wins.
raise ValueError("Impossible board: game should have ended after the game was won")
Τα τεστ θα ελέγξουν για ακριβή αντιστοιχία μηνύματος σφάλματος, οπότε διάβασε προσεκτικά τα αναμενόμενα αποτελέσματα.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.