Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Μονάδες Συμβολοσειρών & Χρόνου
Μονάδα Συμβολοσειρών
Στόχος
Συγκεντρώστε δεδομένα εφαρμογής και στείλτε επιστολές απάντησης χρησιμοποιώντας το module string.
Τώρα που τα υλικά για την κατασκευή της νέας φάρμας έχουν ληφθεί υπόψη, ήρθε η ώρα να στραφούμε στο νέο προσωπικό για τη φάρμα. Διαθέτουμε αρκετές επιστολές που πρέπει να σταλούν για τις αιτήσεις εργασίας, πράγμα που φυσικά θα απαιτούσε πολύ γραφή, ωστόσο μπορούμε να χρησιμοποιήσουμε το module string για να το αντισταθμίσουμε, επιτρέποντάς μας να δημιουργήσουμε πρότυπα και να μορφοποιήσουμε το κείμενο έτσι ώστε να είναι ευκολότερη η διαχείριση μεγάλων σωμάτων κειμένου.
Η εισαγωγή του module string αυτή τη φορά θα γίνει λίγο διαφορετικά από άλλα modules, καθώς θα εισάγουμε κλάσεις που επεκτείνουν το module, και θα εκτελεστούν ως εξής:
import string from string import Template from string import Formatter
Αυτό μας δίνει πρόσβαση τόσο στο ίδιο το module όσο και στις κλάσεις πρότυπου και μορφοποίησης που περιλαμβάνουν τις δικές τους συναρτήσεις. Για τους σκοπούς μας, θα χρησιμοποιήσουμε τις παρακάτω συναρτήσεις και κλάσεις:
string.capwords(): Αυτή η συνάρτηση μετατρέπει τις λέξεις ενός string ώστε να έχουν σωστή κεφαλαιοποίηση, κάνοντας το πρώτο γράμμα κάθε λέξης κεφαλαίο και τα υπόλοιπα μικρά, ανεξάρτητα από το πώς έχει μορφοποιηθεί το string.Template(): Αυτή είναι μια κλάση string που χρησιμοποιείται για τη δημιουργία ενός αντικειμένου προτύπου. Χρησιμοποιεί τη συνάρτησηsubstitute()που σας επιτρέπει να ορίσετε ένα string και να υποδείξετε μια θέση χρησιμοποιώντας το σύμβολο$για να αντικαταστήσετε δεδομένα. Αυτό σας επιτρέπει να δημιουργήσετε αρθρωτά strings που μπορείτε να χρησιμοποιήσετε όποτε θέλετε.Formatter(): Αυτή είναι μια κλάση string που χρησιμοποιείται για τη μορφοποίηση ή τη σύνθεση ενός string. Λειτουργεί με παρόμοιο τρόπο με την κλάσηTemplate()αλλά είναι πιο ανθεκτική και κατάλληλη για μεγαλύτερες ακολουθίες κειμένου. Χρησιμοποιεί τη συνάρτησηformat()που σας επιτρέπει να ορίσετε ένα string και να ενσωματώσετε δεδομένα χρησιμοποιώντας{}.
Ξεκινήστε περπατώντας προς το φωτεινό σημάδι X και χρησιμοποιώντας τη συνάρτηση read() ενώ βρίσκεστε μπροστά στο ντουλάπι, κάτι που θα σας επιτρέψει να έχετε πρόσβαση σε φακέλους με τα ονόματα διαφόρων υποψηφίων. Αυτοί οι φάκελοι υπάρχουν ως τρεις (3) σταθερές λίστες με ονόματα: folder_a, folder_b και folder_c.
Περπατήστε προς το σκοτεινό σημάδι X πάνω από το πράσινο χαλί και στραφείτε προς το γραφείο. Δημιουργήστε τρεις (3) λίστες με ονόματα: names_a, names_b και names_c. Χρησιμοποιήστε κατανοήσεις λίστας με τη συνάρτηση string.capwords() για να μορφοποιήσετε σωστά την κεφαλαιοποίηση των ονομάτων. Συνδέστε τις λίστες με τις αντίστοιχες σταθερές που χρησιμοποιούν τα ίδια γράμματα στο όνομά τους, για παράδειγμα, για το names_a χρησιμοποιήστε τη συνάρτηση string.capwords() με το folder_a, ως εξής: names_a = [string.capwords(x) for x in folder_a]. Χρησιμοποιήστε τον ίδιο τύπο για να γεμίσετε και τις λίστες names_b και names_c.
Δημιουργήστε μια λίστα με το όνομα all_names και συνδυάστε τις τρεις (3) λίστες ονομάτων, ως εξής: all_names = names_a + names_b + names_c. Αυτό θα συνδυάσει όλες τις λίστες σε μία μεγαλύτερη λίστα. Ακολουθήστε το με τη χρήση της συνάρτησης join() της Python που θα ενώσει όλα τα στοιχεία της λίστας σε ένα string. Μπορείτε επίσης να ορίσετε τι θα τοποθετηθεί ανάμεσα σε κάθε στοιχείο της λίστας δηλώνοντάς το μέσα σε εισαγωγικά, ως εξής: all_names = ", ".join(all_templates). Χρησιμοποιήστε την προ-γραμμένη συνάρτηση write() με τη λίστα all_names για να καταγράψετε όλα τα ονόματα με τη σωστή κεφαλαιοποίησή τους.
Στη συνέχεια, πορευτείτε προς το χρυσό σημάδι X και στραφείτε προς το γραφείο, όπου θα ρυθμίσουμε τα πρότυπα. Εδώ θα έχουμε δύο προ-γραμμένα αντικείμενα προτύπου με ονόματα red_templates και blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Κάθε ένα από αυτά τα πρότυπα έχει ένα μοναδικό μήνυμα, όμως μοιράζονται ένα κοινό στοιχείο, το placeholder με την ετικέτα $name. Το σύμβολο $ χρησιμοποιείται για να επισημάνει ένα placeholder που μπορεί να αντικατασταθεί με ένα string της επιλογής σας, στην προκειμένη περίπτωση με ένα όνομα. Αν δεν αντικατασταθεί καμία τιμή, το πρότυπο θα χρησιμοποιήσει απλώς το placeholder μέσα στο string. Για να το συμπληρώσετε, δημιουργήστε μια λίστα με το όνομα all_templates.
Δημιουργήστε έναν βρόχο for με τέσσερις (4) κύκλους, στον οποίο θα αντικαταστήσουμε τα ονόματα στις τρεις (3) λίστες ονομάτων με τα πρότυπα που περιέχουν ονόματα. Για παράδειγμα, θα εφαρμόσουμε το red_template στη λίστα names_a. Χρησιμοποιήστε τη συνάρτηση substitute() για την κλάση Template() ώστε να αντικαταστήσετε το placeholder $name στο πρότυπο με τα ονόματα της λίστας.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Πραγματοποιήστε το ίδιο για τις λίστες names_b και names_c: για το names_b χρησιμοποιήστε επίσης το red_template και για το names_c χρησιμοποιήστε το blue_template.
Μόλις όλες οι λίστες ονομάτων έχουν γεμίσει με τα νέα πρότυπα, ήρθε η ώρα να τις αξιολογήσουμε. Δημιουργήστε μια νέα λίστα με το όνομα all_templates και συνδυάστε όλες τις λίστες ονομάτων, ως εξής: all_templates = names_a + names_b + names_c. Χρησιμοποιήστε ξανά τη συνάρτηση join() για να συγχωνεύσετε όλα τα ονομασμένα πρότυπα σε μια αναγνώσιμη μορφή, ως εξής: all_templates = "\n".join(all_templates). Χρησιμοποιήστε την προ-γραμμένη συνάρτηση write() με το all_templates για να αναγράψετε όλους τους τίτλους για τα διαφορετικά ονόματα.
Στη συνέχεια, πορευτείτε προς το σκοτεινό σημάδι X πάνω από το κόκκινο χαλί και στραφείτε προς το γραφείο, όπου θα μορφοποιήσουμε και θα καταγράψουμε το πρώτο σετ επιστολών. Ξεκινήστε δημιουργώντας δύο (2) αντικείμενα μορφοποιητή με ονόματα red_1 και red_2 χρησιμοποιώντας την κλάση, ως εξής: red_1 = Formatter(), red_2 = Formatter(). Για τη σύνθεση των επιστολών, δημιουργήστε μια λίστα με το όνομα red_letters.
Όπως και πριν, θα χρησιμοποιήσουμε έναν βρόχο for με τέσσερις (4) κύκλους, όπου θα χρησιμοποιήσουμε δύο σετ προ-γραμμένων συμβολοσειρών που θα μορφοποιηθούν χρησιμοποιώντας τη συνάρτηση format() και θα προσθέτουν τις μεταβλητές ονομάτων. Αυτές οι μορφοποιημένες συμβολοσειρές θα προστεθούν στη λίστα red_letters, σχηματίζοντας μια ολοκληρωμένη λίστα επιστολών που θα αποσταλούν. Για παράδειγμα, το αντικείμενο μορφοποίησης red_1 θα μορφοποιηθεί με τη λίστα names_a και θα προστεθεί στη λίστα red_letters.
for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office...", names_a[x]))
Κάντε το ίδιο και με το αντικείμενο μορφοποίησης red_2 χρησιμοποιώντας την προ-γραμμένη συμβολοσειρά του και προσθέτοντας τα ονόματα της λίστας names_b στον βρόχο. Μόλις ολοκληρωθεί, χρησιμοποιήστε τη συνάρτηση join() με τη λίστα red_letters για να συγχωνεύσετε τα δεδομένα σε ένα ενιαίο αρχείο, ως εξής: red_letters = "\n".join(red_letters). Χρησιμοποιήστε τη συνάρτηση write() με το red_letters για να καταγράψετε όλες τις μορφοποιημένες επιστολές που θα αποσταλούν.
Τέλος, πορευτείτε προς το σκοτεινό σημάδι X πάνω από το μπλε χαλί και στραφείτε προς το γραφείο, όπου θα μορφοποιήσουμε και θα συνθέσουμε το τελευταίο σετ επιστολών. Όπως και πριν, δημιουργήστε δύο (2) αντικείμενα μορφοποιητή με ονόματα blue_1 και blue_2 χρησιμοποιώντας την κλάση, ως εξής: blue_1 = Formatter(), blue_2 = Formatter(). Δημιουργήστε μια λίστα με το όνομα blue_letters για να μορφοποιήσετε και να συνθέσετε όλες τις επιστολές.
Και πάλι, δημιουργήστε έναν βρόχο for με τέσσερις (4) κύκλους και χρησιμοποιήστε τις προ-γραμμένες συμβολοσειρές για να μορφοποιήσετε τις λίστες ονομάτων και να τις προσθέσετε στη λίστα blue_letters χρησιμοποιώντας τη συνάρτηση format(). Σε αυτή την περίπτωση, αντιστοιχίστε το αντικείμενο μορφοποίησης blue_1 με τη λίστα names_c και το αντικείμενο μορφοποίησης blue_2 με τη λίστα names_b. Όλα αυτά γίνονται με τον ίδιο τρόπο όπως πάνω από το κόκκινο χαλί, αλλά χρησιμοποιώντας διαφορετικές τιμές, δείχνοντας την ευελιξία που προσφέρουν οι μορφοποιήσεις και τα πρότυπα. Μόλις ολοκληρωθεί, χρησιμοποιήστε τη συνάρτηση write() με το blue_letters για να καταγράψετε τις τελευταίες επιστολές και να ολοκληρώσετε το επίπεδο.