Coding for KidsCoding for Kids
Livelli CreativiSfideGuida per Insegnanti
Vota per le funzionalità
Corso Avanzato di Sviluppo Python
Capitolo
>
Livello

Moduli Stringa e Tempo
Modulo Regex

Obiettivo

Verifica e organizza i file relativi ai dipendenti e alle assegnazioni di zona utilizzando le espressioni regolari.

Negli uffici vicini c'è della documentazione che deve essere aggiornata riguardo ai dipendenti che iniziano a lavorare sulla nuova terra agricola e alla zonizzazione per la coltivazione dei campi e il bestiame. Gestire i file può essere piuttosto complicato, specialmente quando si tratta di grandi quantità di testo. Per questo scopo useremo il modulo re, che è l'abbreviazione di Regular Expressions, anche conosciuto come Regex. Possiamo accedere alle sue funzioni usando import re; per il livello attuale useremo le seguenti funzioni:

  • re.findall(): Restituisce una lista di tutte le occorrenze di una stringa. Accetta due (2) argomenti, il primo sono i caratteri che stai cercando in una stringa, il secondo è la stringa in cui cercare.
  • re.sub(): Sostituisce una determinata occorrenza con una certa stringa. Accetta tre (3) argomenti, il primo sono i caratteri che desideri sostituire, il secondo è ciò con cui vuoi sostituirli e il terzo è la stringa in cui effettuare la ricerca.
  • re.search(): Trova la posizione di qualcosa in una stringa e restituisce un oggetto. Accetta due (2) argomenti, i caratteri che stai cercando e la stringa in cui effettuare la ricerca. Puoi utilizzare altre funzioni con l'oggetto restituito, come span() che fornisce un vettore con le posizioni di inizio e fine dell'elemento cercato nel testo.
  • re.split(): Divide una stringa in una lista in base a intervalli specificati. Accetta due (2) argomenti, il primo indica dove dividere la stringa e il secondo è la stringa che vuoi dividere.
  • re.match(): Controlla se una stringa contiene un certo valore all'inizio. Questa funzione funziona come una versione semplificata di re.search() ma è più efficiente in quanto verifica se la stringa in cui cerchi inizia con la query.

Il modulo re può anche utilizzare sequenze speciali, ovvero codici che permettono di rilevare varie proprietà della stringa. Esiste una lunga lista di sequenze speciali ma per questo livello useremo le seguenti:

  • \B: Verifica se i caratteri specificati sono presenti nella stringa ma non si trovano all'inizio o alla fine di una parola.
  • \D: Restituisce i caratteri che non sono cifre da 0 a 9.

Se è presente una r davanti a una sequenza speciale, significa che si sta controllando una raw string (stringa grezza).

Inizia camminando fino al segno X dorato e rivolgendoti verso il tavolo con il promemoria, usa la funzione read() per controllare il promemoria che contiene un manifesto di tutti i dipendenti. Ogni nome contiene # che delimita il rispettivo numero di dipendente; la stringa contenente i nomi è memorizzata in una costante chiamata manifest.

Crea una lista chiamata tags e memorizza il valore di re.findall(), usato per cercare tutti i # nella costante manifest, in questo modo: tags = re.findall("#", manifest). Crea una variabile chiamata number e utilizza len() con la lista tags per contare quanti elementi contiene; questo ci farà sapere quanti dipendenti sono presenti nel manifesto. Utilizza la funzione speak() con la variabile number per annunciare quanti nomi sono presenti nella lista.

Successivamente, cammina fino al segno X luminoso accanto al tappeto blu e rivolgi lo sguardo alla scrivania, quindi usa la funzione read(). Qui troverai una lista di nuovi assunti con i loro incarichi assegnati. Prendi nota dei nomi in ogni professione così da poterli confrontare con quelli attualmente assegnati. Cammina fino al segno X sopra il tappeto blu e utilizza nuovamente read() per verificare gli incarichi attualmente assegnati.

La forza lavoro attuale è memorizzata in una costante chiamata assignments; dobbiamo aggiornare questo documento con le informazioni contenute nella lista dei nuovi assunti. Sostituisci i nomi differenti nella lista utilizzando la funzione re.sub() per sostituire una parte della stringa con un'altra. Ad esempio, una delle modifiche è la seguente:

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

Il nome "Billy Hodgins" viene sostituito con "Carol Hopkins" nel documento. A parte questa modifica, analizza il documento ed effettua anche un'altra sostituzione, aggiornando un ulteriore nome della lista per completare l'aggiornamento del documento. Usa la funzione write() con assignments per verificare i risultati.

Ora che ci siamo occupati dei registri dei dipendenti, è il momento di passare alla zonizzazione della fattoria. Cammina fino al segno X scuro sopra il tappeto rosso e usa la funzione read(), che ti mostrerà una revisione dettagliata della zonizzazione. Queste informazioni sono memorizzate in una costante chiamata zones.

Di particolare importanza è identificare la posizione di 6210 nel documento, poiché quella zona necessita di una rivalutazione. Per questo dobbiamo utilizzare la funzione re.search() per individuare la posizione di quel numero di settore nella zonizzazione. Crea una variabile chiamata index e memorizza l'oggetto di ricerca, impostando la ricerca su r"6210\B". Ciò significa che la r indica una stringa grezza, 6210 è il numero del settore che stiamo cercando, e \B è il criterio della sequenza speciale per la ricerca. Questo si effettua nel seguente modo: index = re.search(r"6210\B", zones).

Ora che index contiene un oggetto di ricerca, è il momento di estrarre i dati da esso utilizzando span(). Crea una variabile chiamata vector e memorizza la posizione dell'oggetto di ricerca, in questo modo: vector = index.span(). Una volta impostato, utilizza la variabile vector con la funzione write() pre-scritta.

Successivamente lavoreremo all'identificazione degli elementi della zonizzazione; cammina fino al segno X scuro sopra il tappeto verde. Crea una lista chiamata sectors e utilizza la funzione re.split() per consolidare tutti i vari settori della zonizzazione in una lista. Nella funzione split, usa la sequenza speciale "\D" per prelevare solo i numeri dalla variabile zones. Utilizza una list comprehension per rimuovere eventuali spazi vuoti dalla lista, impiegando la funzione len() per eliminare gli elementi troppo piccoli per rappresentare un numero di settore. In questo modo:

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

Usa la funzione write() con zones per elencare tutti i settori della zonizzazione.

Cammina fino al segno X luminoso accanto al tappeto viola e rivolgi l'attenzione all'archivio, usa la funzione read() per verificare i settori prioritari nella zonizzazione della terra agricola. Prendi nota dei settori, in quanto dovremo verificare se tali settori sono presenti nella lista della zonizzazione.

Cammina fino al segno X scuro sopra il tappeto viola; ci sono tre (3) settori prioritari in variabili chiamate: sector_a, sector_b, sector_c, pre-scritte nell'editor del codice. Inserisci i valori che hai letto al segno X luminoso. Queste variabili utilizzano una list comprehension che esamina tutti gli elementi della lista sectors e li filtra mediante la funzione re.match(). Utilizza le variabili sector_a, sector_b, sector_c e inseriscile nella funzione write() pre-scritta per completare il livello.

Libro del Codice