Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel
Modulele de șiruri și timp
Modulul de Șiruri
Obiectiv
Compilează datele de aplicație și trimite scrisori de răspuns folosind modulul string.
Acum că materialele pentru construcția noii ferme au fost contabilizate, este timpul să ne concentrăm pe personalul nou pentru fermă. Avem mai multe scrisori care trebuie trimise pentru cereri de angajare; în mod natural, acest lucru ar necesita multă scriere, totuși putem folosi modulul string pentru a compensa acest aspect, permițându-ne să creăm șabloane și să formatezi textul astfel încât să fie mai ușor de gestionat corpurile de text.
Importarea modulului string în acest caz se va face puțin diferit față de alte module, deoarece vom importa clase care extind modulul și vor fi executate în următoarea manieră:
import string from string import Template from string import Formatter
Acest lucru ne oferă acces la modulul propriu-zis, precum și acces la clasele de șablon și formatare care includ propriile funcții. Pentru scopurile noastre, vom folosi următoarele funcții și clase:
string.capwords(): Această funcție convertește cuvintele dintr-un șir pentru a avea capitalizarea corectă, făcând prima literă a unui cuvânt majusculă și restul minuscule, indiferent de modul în care este format șirul.Template(): Aceasta este o clasă de șiruri, folosită pentru a crea un obiect șablon. Ea utilizează funcțiasubstitute()care permite configurarea unui șir și evidențierea unei locații folosind semnul$pentru a schimba datele. Acest lucru îți permite să creezi șiruri modulare pe care le poți folosi după bunul plac.Formatter(): Aceasta este o clasă de șiruri, folosită pentru a formata sau compune un șir. Funcționează într-o manieră similară cu clasaTemplate(), dar este mai robustă și mai potrivită pentru secvențe de șiruri mai mari. Utilizează funcțiaformat()care permite configurarea unui șir și inserarea datelor folosind{}.
Începe prin a te îndrepta spre semnul X luminos și folosește funcția read() în timp ce te orientezi spre dosar; acest lucru îți va permite să accesezi folderele care conțin numele diferiților solicitanți. Aceste foldere sunt reprezentate ca trei constante de listă numite: folder_a, folder_b și folder_c.
Merge către semnul X întunecat de peste covorul verde și orientează-te spre birou. Creează trei liste numite: names_a, names_b și names_c. Folosește comprehensiuni de liste împreună cu funcția string.capwords() pentru a formata numele cu capitalizarea corectă. Asociază listele cu constantele care au aceleași litere în numele lor; de exemplu, pentru names_a folosește string.capwords() cu folder_a, astfel: names_a = [string.capwords(x) for x in folder_a]. Folosește aceeași formulă pentru a popula names_b și names_c.
Creează o listă numită all_names și combină cele trei liste de nume, astfel: all_names = names_a + names_b + names_c. Acest lucru va uni toate listele într-o singură listă mai mare. Urmează folosirea funcției Python join(), care va uni toate elementele listei într-un șir. De asemenea, poți specifica ce se introduce între fiecare element al listei, declarând acest lucru între ghilimele, astfel: all_names = ", ".join(all_templates). Folosește funcția write() predefinită cu lista all_names pentru a înregistra toate numele cu capitalizarea corectă.
Următorul pas: mergi spre semnul X auriu și orientează-te spre birou; aici vom configura șabloanele. Vom avea două obiecte șablon predefinite, numite red_templates și blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Fiecare dintre aceste șabloane are un mesaj unic, însă au în comun un element de plasare etichetat $name. Simbolul $ este folosit pentru a desemna un element de plasare care poate fi înlocuit cu un șir de caractere ales de tine, în acest caz un nume, așa cum sugerează titlul. Dacă nu se înlocuiește nicio valoare, șablonul va utiliza pur și simplu elementul de plasare din șirul inițial. Pentru a completa acest aspect, creează o listă numită all_templates.
Creează un ciclu for cu patru (4) iterații; astfel, vom înlocui numele din cele trei liste cu șabloanele care includ numele. De exemplu, vom aplica red_template la lista names_a. Folosește funcția substitute() a clasei Template() pentru a înlocui elementul de plasare $name din șablon cu numele din listă.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Procedează la fel și pentru names_b și names_c; pentru names_b folosește tot red_template, iar pentru names_c folosește blue_template.
După ce toate listele de nume au fost populate cu noile șabloane, este timpul să le revizuiești. Creează o listă nouă numită all_templates și combină toate listele de nume, astfel: all_templates = names_a + names_b + names_c. Folosește aceeași funcție join() ca mai devreme pentru a compila toate numele șablonate într-o formă lizibilă, astfel: all_templates = "\n".join(all_templates). Folosește funcția write() predefinită cu all_templates pentru a afișa toate antetele pentru diferitele nume.
Următorul pas: mergi la semnul X întunecat de peste covorul roșu și orientează-te spre birou; aici vom formata și scrie primul set de scrisori. Începe prin a crea două obiecte de formatare, denumite red_1 și red_2, cu specificarea clasei, astfel: red_1 = Formatter() și red_2 = Formatter(). Pentru compunerea scrisorilor, creează o listă numită red_letters.
La fel ca înainte, vom avea un ciclu for cu patru (4) iterații, unde vom avea două seturi de șiruri predefinite care vor fi formate folosind funcția format() și la care se vor adăuga variabilele de nume. Aceste șiruri formate vor fi adăugate la lista red_letters, formând o listă cuprinzătoare de scrisori care vor fi trimise. De exemplu, obiectele de formatare red_1 vor fi formate cu lista names_a și adăugate la lista 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]))
Procedează similar cu obiectul de formatare red_2 folosind șirul său predefinit și adaugă names_b în ciclu. După ce totul a fost configurat, folosește funcția join() cu red_letters pentru a compila datele într-un singur fișier, astfel: red_letters = "\n".join(red_letters). Utilizează funcția write() cu red_letters pentru a înregistra toate scrisorile formate care urmează a fi trimise.
În final, mergi la semnul X întunecat de peste covorul albastru și orientează-te spre birou; aici vom formata și compune ultimul set de scrisori. La fel ca înainte, creează două obiecte de formatare, denumite blue_1 și blue_2, cu specificarea clasei, astfel: blue_1 = Formatter() și blue_2 = Formatter(). Creează o listă blue_letters pentru a formata și compune toate scrisorile.
Din nou, creează un ciclu for cu patru (4) iterații și folosește șirurile predefinite pentru a formata listele de nume și a le adăuga la lista blue_letters folosind funcția format(). În acest caz, asociază obiectele de formatare blue_1 cu lista names_c și obiectele de formatare blue_2 cu lista names_b. Toate acestea se fac în aceeași manieră ca la covorul roșu, dar folosind valori diferite, demonstrând versatilitatea utilizării formatelor și a șabloanelor. După ce ai terminat, folosește funcția write() cu blue_letters pentru a arhiva ultima serie de scrisori și a finaliza nivelul.