Coding for KidsCoding for Kids
Niveluri CreativeProvocăriGhid pentru Profesori
Votează pentru funcții
Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Module de Șiruri și Timp
Modul Regex

Obiectiv

Verificați și organizați fișierele referitoare la angajați și alocările zonale folosind expresii regulate.

În birourile din vecinătate există câteva documentații care trebuie actualizate referitor la angajații care își încep munca pe noul teren agricol și la zonificarea locurilor unde culturile și animalele vor fi îngrijite. Gestionarea fișierelor poate fi destul de complicată, mai ales atunci când lucrați cu volume mari de text. În acest scop vom folosi modulul re, care este prescurtarea pentru Expresii Regulate, de asemenea abreviat ca Regex. Putem accesa funcțiile sale folosind import re, iar pentru scopurile acestui nivel vom folosi următoarele funcții:

  • re.findall(): Returnează o listă cu toate aparițiile unui șir de caractere. Primește două (2) argumente, primul fiind ce caractere căutați într-un șir, iar al doilea șirul în care se efectuează căutarea.
  • re.sub(): Înlocuiește apariția indicată cu un anumit șir. Primește trei (3) argumente, primul fiind caracterele pe care doriți să le înlocuiți, al doilea fiind cu ce doriți să le înlocuiți și al treilea șirul în care se efectuează căutarea.
  • re.search(): Găsește locația unui element într-un șir, returnând un obiect. Primește două (2) argumente, caracterele pe care le căutați și șirul în care căutați. Puteți folosi alte funcții cu obiectul returnat, cum ar fi span() care returnează un vector cu pozițiile de început și de sfârșit ale elementului căutat în text.
  • re.split(): Împarte șirul într-o listă la intervale specificate. Primește două (2) argumente, primul specifică unde să se împartă șirul și al doilea este șirul pe care doriți să-l împărțiți.
  • re.match(): Verifică dacă un șir conține o anumită valoare la început. Aceasta funcționează ca o versiune simplificată a funcției re.search(), dar este mai eficientă și verifică dacă șirul în care căutați are interogarea la început.

Modulul re poate folosi și secvențe speciale, există coduri pe care le puteți utiliza cu funcțiile re pentru a cuprinde o varietate de proprietăți ale șirurilor. Există o listă lungă de secvențe speciale, dar pentru acest nivel vom folosi următoarele:

  • \B: Verifică dacă anumite caractere se găsesc în șir, dar nu la începutul sau la sfârșitul unui cuvânt.
  • \D: Returnează caractere care nu sunt cifre între 0-9

Dacă apare un r înaintea unei secvențe speciale, înseamnă că se verifică șirul brut.

Începeți mergând spre semnul X auriu și orientându-vă către masa cu memoriul, utilizați funcția read() pentru a verifica memoriul care conține un manifest cu toți angajații. Fiecare nume conține # care delimitează numărul de angajat, iar șirul ce conține numele este de asemenea stocat într-o constantă numită manifest.

Creați o listă numită tags și stocați valoarea returnată de re.findall(), utilizată pentru a căuta toate aparițiile # în constanta manifest, astfel: tags = re.findall("#", manifest). Creați o variabilă numită number și folosiți len() împreună cu lista tags pentru a conta câte elemente sunt în listă, acest lucru ne va spune câți angajați sunt în manifest. Utilizați funcția speak() cu variabila number pentru a anunța câte nume sunt în listă.

Următorul pas, mergeți spre semnul X luminos de lângă covorul albastru și orientați-vă spre birou și utilizați funcția read(). Aici veți avea o listă de noii angajați cu posturile lor asignate. Notați numele din fiecare profesie pentru a le putea verifica cu persoanele deja asignate. Mergi spre semnul X de pe covorul albastru și folosește din nou read() pentru a verifica posturile asignate în prezent.

Forța de muncă actuală este stocată într-o constantă numită assignments, trebuie să actualizăm acest document cu informațiile din lista noilor angajați. Înlocuiți numele care sunt diferite în listă utilizând funcția re.sub() pentru a substitui o parte a șirului cu altă parte. De exemplu, una dintre modificări este următoarea:

assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)

Numele "Billy Hodgins" este înlocuit cu "Carol Hopkins" în document. În afară de această schimbare, scanați documentul și actualizați acest nume și încă un nume din listă pentru a actualiza complet documentul. Utilizați funcția write() cu assignments pentru a verifica rezultatele.

Acum că ne-am ocupat de listele de angajați, este timpul să trecem la zonificarea fermei. Mergi spre semnul X întunecat de pe covorul roșu și folosește funcția read(), aceasta îți va arăta o revizuire detaliată a zonificării. Aceste informații sunt stocate într-o constantă numită zones.

De remarcat în mod deosebit este faptul că este important să identificăm locația 6210 în document, deoarece zona trebuie reevaluată. Pentru aceasta, trebuie să folosim funcția re.search() pentru a identifica locația acelui număr de sector în zonificare. Creați o variabilă numită index și stocați obiectul returnat de căutare, setând căutarea la r"6210\B". Aceasta se efectuează astfel: index = re.search(r"6210\B", zones).

Acum că index deține un obiect de căutare, este timpul să extragem date din acesta folosind span(). Creați o variabilă numită vector și stocați locația obiectului de căutare, astfel: vector = index.span(). Odată configurat, utilizați variabila vector cu funcția write() predefinită.

Următorul pas va fi identificarea elementelor de zonificare, mergeți spre semnul X întunecat de pe covorul verde. Creați o listă numită sectors și utilizați funcția re.split() pentru a consolida toate diferitele sectoare de zonificare într-o listă. La funcția split, folosiți secvența specială "\D" pentru a extrage doar numerele din variabila zones. Folosiți o listă de comprehensiune pentru a elimina orice spații goale din listă, utilizând funcția len() pentru a elimina elementele care sunt prea mici pentru a reprezenta un număr de sector. Astfel:

sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]

Utilizați zones împreună cu funcția write() pentru a enumera toate sectoarele de zonificare.

Mergi spre semnul X luminos de lângă covorul mov și orientează-te spre sertarul de dosare, folosește funcția read() pentru a verifica sectoarele prioritare în zonificarea terenului agricol. Notați sectoarele deoarece trebuie să verificăm dacă aceste sectoare se găsesc în lista de zonificare.

Mergi spre semnul X întunecat de pe covorul mov, există trei (3) sectoare prioritare în variabile numite: sector_a, sector_b, sector_c, predefinite în editorul de cod, introduceți valorile pe care le-ați citit de la semnul X luminos. Aceste variabile folosesc o listă de comprehensiune care parcurge toate elementele din lista sectors și le filtrează folosind funcția re.match(). Utilizați variabilele sector_a, sector_b, sector_c și introduceți-le în funcția write() predefinită pentru a finaliza nivelul.

Carte de Cod