Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Διακοσμητές
Αλυσίδωση Διακοσμητών
Στόχος
Διακοσμήστε την οροφή με πολύχρωμες σημαίες αλυσίδοντας διακοσμητές.
Η οροφή απολαμβάνει λίγο φρέσκο αέρα μετά από τόσο καιρό να είναι κλειστή μέσα στην κουζίνα, αλλά κάποιες από τις γραμμές δεν έχουν σημαίες. Θα ήταν καλή ιδέα να τις τοποθετήσετε ενώ είστε εδώ, αλλά μπορεί να είναι περίπλοκο δεδομένου ότι χρειάζεστε διάφορες σημαίες για να διαμορφώσετε μια γραμμή. Αυτό μπορείτε να το πετύχετε αλυσίδοντας διακοσμητές.
Οι διακοσμητές αλυσίδονται διπλασιάζοντας τα σύμβολα @, δηλαδή, προσθέτοντας πολλαπλούς διακοσμητές σε μία μόνο συνάρτηση. Για παράδειγμα, αυτό σας επιτρέπει να τοποθετήσετε μια συνάρτηση ανάμεσα σε δύο διακοσμητικές συναρτήσεις:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
Ο παραπάνω κώδικας απεικονίζει μια συνάρτηση με συρριγμένους διακοσμητές, οι οποίοι ενσωματώνονται στη συνάρτηση έτσι ώστε στις άκρες της γραμμής να τοποθετούνται μπλε σημαίες, στο εσωτερικό στρώμα να τοποθετούνται κόκκινες σημαίες και τέλος στη μέση μια πράσινη σημαία. Όλες προστίθενται σε μια λίστα με όνομα line, αυτή είναι η μέθοδος που θα χρησιμοποιηθεί για την τοποθέτηση των σημαίων στις γραμμές.
Ξεκινήστε πηγαίνοντας στο χρυσό σημάδι X και χρησιμοποιώντας τη συνάρτηση read() για να ελέγξετε τις οδηγίες που αναγράφονται στο πινακίδα. Εδώ θα σας ενημερώσει για το ποιες σημαίες να τοποθετήσετε και πού, καθώς υπάρχουν τρεις (3) διαφορετικοί τύποι πολύχρωμων σημαίων: "red", "green" και "blue". Κάθε γραμμή θα έχει και τις τρεις σημαίες, μία (1) στη μέση της γραμμής, δύο (2) στην εσωτερική γραμμή και δύο (2) στην εξωτερική γραμμή, κάνοντας σύνολο πέντε (5) σημαίες ανά γραμμή, όπως η προετοιμασμένη γραμμή στο κάτω αριστερό μέρος του χάρτη.
Πηγαίνετε στο ανοιχτό σημάδι X και χρησιμοποιήστε τη συνάρτηση collect() για να μαζέψετε τις "flags" στο κουτί. Στη συνέχεια, πηγαίνετε στα σκοτεινά σημάδια X και, από τα αριστερά προς τα δεξιά, αρχίστε να τοποθετείτε τις σημαίες με τη σειρά που περιγράφτηκε στις οδηγίες που διαβάσατε προηγουμένως. Χρησιμοποιήστε τις ενδιάμεσες συναρτήσεις για να το πετύχετε, για παράδειγμα: η middle_green() δημιουργεί μια σειρά σημαίας όπως αυτή: ["blue", "red", "green" ,"red","blue" ]. Στη συνέχεια, χρησιμοποιήστε τη συνάρτηση place() για να τοποθετήσετε τη γραμμή χρησιμοποιώντας τη λίστα line, όπως εξής: place(line).
Μεταξύ κάθε σημείου X καθαρίστε τη λίστα line χρησιμοποιώντας τη συνάρτηση clear(), όπως εξής: line.clear(), αυτό σας επιτρέπει να επαναχρησιμοποιείτε τη λίστα χωρίς να χρειάζεται να δημιουργείτε μία καινούργια για κάθε γραμμή. Το τελευταίο σημάδι X στα δεξιά απαιτεί μια προσαρμοσμένη συνάρτηση:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
Χρησιμοποιήστε τα δύο σύμβολα @ για να προσθέσετε διακοσμητές στη συνάρτηση, και στη συνέχεια συμπληρώστε την εντολή append της γραμμής καθώς και το χρώμα της σημαίας στο string. Κάντε το σύμφωνα με τις οδηγίες στην πινακίδα για να ολοκληρώσετε το επίπεδο.