Video Corso Base di Python 3

18: Metodi per Stringhe e Formattazione Avanzata

In questa nuova lezione approfondiremo la nostra conoscenza del tipo di dato testuale di Python, le Stringhe.

Vorrei anzitutto iniziare da una nuova tipologia di concatenazione tra testo e variabili che è appena stata introdotta in Python 3.6, chiamata in Inglese Formatted String Literals, che va a migliorare il sistema di formattazione già presente in Python 3, rendendolo davvero di una potenza sconvolgente!

Fin'ora quando abbiamo dovuto concatenare delle variabili con delle stringhe, abbiamo utilizzato l'operatore + per unire i valori tra di loro, ad esempio:

>>> nome = "Jack"
>>> "Ciao " + nome
'Ciao Jack'

Per poter unire dei valori numerici inoltre, abbiamo sempre dovuto utilizzare la funzione di supporto str()

numero = 18
>>> "Ciao " + nome + " questa è la lezione n" + str(numero)
'Ciao Jack questa è la lezione n18'

Piuttosto confusionale non vi pare? Ma tranquilli, con questo metodo che vi spiegheró ora potrete tirare un sospiro di sollievo e cimentarvi nelle concatenazioni più disparate.

Per utilizzare questo nuovo sistema di formattazione, dovete iniziare la nuova stringa con una f, che significa appunto formatted, e che informa Python di come deve interpretare le istruzioni successive. Tutte le variabili che volete passare le passate tra parentesi graffe:

>>> f"Ciao {nome}, questa è la lezione n{numero}! Benvenuto!"
'Ciao Jack, questa è la lezione n18! Benvenuto!'

Fantastico non trovate? La facilità di utilizzo e di letture è a mio avviso sconvolgente! Chiaramente potete anche utilizzare questa formattazione per assegnare questa concatenazione di valori a una variabile:

>>> saluto = f"Ciao {nome}, questa è la lezione n{numero}! Benvenuto!"
>>> saluto
'Ciao Mike, questa è la lezione n18! Benvenuto!'

Possiamo inoltre effettuare operazioni numeriche in maniera veramente semplice:

>>> z = 5
>>> f"Il quadrato di {z} è {z * z}"
'Il quadrato di 5 è 25'

Esercitatevi e provate a vedere fino a dove è possibile utilizzare questa metodologia di concatenazione! Ne rimarrete stupiti, garantito!

Andiamo ora a fare un elenco dei metodi per stringhe che troverete utilissimi e che vi permetteranno di risparmiare tempo e codice.

>>> messaggio = "Fate il vostro gioco"

Direi anzitutto di iniziare con quelli che sono forse i miei metodi preferiti, mi riferisco a startswith() e endswith().

Ció che questi due metodi fanno è controllare se la Stringa in analisi inizia oppure finisce, con una parola o lettera passata come parametro. Questi metodi restituiscono valori Booleani, quindi ricordiamolo, True o False.

>>> messaggio.startswith("Fate")
True
>>> messaggio.startswith("F")
True
>>> messaggio.starstwith("x")
False

>>> messaggio.endswith("gioco")
True
>>> messaggio.endswith("gioc")
False
<

Parliamo ora di isupper() e islower(): questi metodi controllano se tutte le lettere nella stringa analizzata sono maiuscole o minuscole, e anche stavolta restituiscono valore True o False in base al risultato dell'analisi:

>>> nome = "alice"

>>> nome.islower()
True

>>> nome = "BOB"
>>> nome.isupper()
True

>>> cane = "Lucky"
>>> cane.islower()
False

>>> cane.isupper()
False

Parallelamente potete ottenere la versione con le lettere tutte in maiuscolo o tutto in minuscolo grazie ai metodi upper() e lower():

>>> nome.lower()
'bob'

>>> cane.upper()
LUCKY

Ma tenete a mente che in questo caso vi viene fornita una nuova versione della stringa, e non una modifica alla stringa stessa:

>>> cane
'Lucky'

Questo perché le stringhe sono valori immutabili.

Parleremo bene dei dettagli tecnici su questo tipo di dato in un altro video più avanti, per ora tenete a mente che volendo modificare il contenuto vero e proprio, dovete riassegnare la varianbile:

>>> cane = cane.upper()

>>> cane
'LUCKY'

Andiamo avanti introducendo isalpha() e isdecimal(): come i nomi suggeriscono, questi metodi controllano se una stringa è composta da sole lettere o soli numeri rispettivamente:

>>> parola = "asd"
>>> parola.isalpha()
True

Se avessimo aggiunto anche solo uno spazio nella stringa, isalpha() avrebbe restituito False:

>>> parola = "asd "
>>> parola.isalpha()
False

>>> num = "123"
>>> num.isdecimal()
True

Per verificare se invece la stringa è composta o da numeri o da lettere allo stesso tempo usiamo isalnum():

>>> spam = "asd123q"
>>> spam.isalnum()
True

Questi metodi sono fantastici se implementati in un ciclo For.. ad esempio, supponiamo di avere una stringa composta da svariati caratteri e di voler estrarre solo lettere e numeri:

>>> eggs = "@qwe54!?+"
>>> for carattere in eggs:
...     if carattere.isalnum() == True:
...             print(carattere)
... 
q
w
e
5
4

Per verificare se una stringa o un carattere è invece uno spazio bianco, usiamo isspace():

>>> bacon = "qwe rty"
>>> bacon[3].isspace()
True

Bene, passiamo ora agli ultimi due metodi che analizzeremo in questo video, split() e join():

Il metodo join() è utilissimo quando ci troviamo con una Lista di stringhe o parole, e vogliamo unirle tra di loro per formare una nuova stringa risultante.

>>> compiti = ["portare il cane a passeggio", "finire di studiare", "fare la spesa", "lavare i panni"]

Anzitutto il metodo join viene chiamato su una stringa, che vogliamo utilizzare come collante diciamo tra le varie parole o stringhe vogliamo unire:

>>> ", ".join(compiti)
'portare il cane a passeggio, finire di studiare, fare la spesa, lavare i panni'

>>> da_fare = "oggi devo: " + ", ".join(compiti)

>>> da_fare
'oggi devo: portare il cane a passeggio, finire di studiare, fare la spesa, lavare i panni'

Possiamo anche chiamare join() su un carattere newline per separare i vari elementi con una nuova riga:

>>> da_fare = "\n".join(compiti)

>>> print(da_fare)
portare il cane a passeggio
finire di studiare
fare la spesa
lavare i panni

Al contrario, col metodo split() possiamo dividere una stringa su cui viene richiamato, in una lista di stringhe, in questo modo:

>>> serie_numerica = "1492-1984-123311-555"
>>> serie_numerica.split("-")
['1492', '1984', '123311', '555']

Quindi stavolta tra le parentesi di split() mettiamo il carattere o parola o stringa insomma, che segnala a split() dove effettuare questa suddivisione.

>>> citazione = "Nel mezzo del cammin di nostra vita"
>>> citazione.split(" ")
['Nel', 'mezzo', 'del', 'cammin', 'di', 'nostra', 'vita']

Ricapitolando:

  • Possiamo effettuare interpolazioni tra variabili e stringhe mediante il sistema "Formatted String Literals"
  • Come per le Liste, anche le Stringhe dispongono di tantissimi metodi associati
  • startswith() e endswith() restituiscono True se la stringa inizia o finisce in una determinata maniera
  • Usiamo isupper() e islower() per verificare se una Stringa è composta solamente da maiuscole o minuscole
  • Usiamo upper() e lower() per ottenere una versione della Stringa tutta in maiuscolo o minuscolo
  • Con isalpha() e isdecimal() verifichiamo se una stringa è composta da sole lettere o soli numeri
  • Con isalnum() verifichiamo se una stringa è composta solamente da lettere e numeri
  • Con isspace() verifichiamo la presenza di spazi bianchi
  • Usiamo join() e split() rispettivamente per unire varie stringhe in una nuova, o dividere una stringa in una lista di stringhe

Menu della Serie