18. I Principali Metodi per Stringhe - Programmare in Python

18. I Principali Metodi per Stringhe

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 confusionario 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 variabile:

>>> 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']