In questa lezione ci occupiamo di come trattare le stringhe in Python. Abbiamo già visto che per dichiarare una stringa è sufficiente assengare ad una nuova variabile un testo racchiuso tra virgolette: è possibile racchiudere il suo valore indifferentemente tra apici (carattere ') o doppi apici (carattere ").
Questo permette di superare facilmente il problema dell’utilizzo dei suddetti caratteri nel valore stesso della stringa, ad esempio "l'acqua" o 'Egli disse: "Acqua"'. È anche possibile usare il carattere di escape \ prima di ' o ": 'Egli disse: "L\'acqua"'.
Le stringhe, così come le liste o le tuple, sono un tipo particolare di sequenze e perciò supportano tutte le operazioni comuni alle sequenze. Vediamone alcune.
Indexing e Slicing
In Python, è possibile accedere agli elementi di una sequenza, usando la sintassi sequenza[indice]. Questo restituirà l’elemento in posizione indice (il primo elemento ha sempre indice 0). È inoltre possibile specificare indici negativi che partono dalla fine della sequenza (l’ultimo elemento ha indice -1, il penultimo -2, ecc.). Questa operazione è chiamata indexing.
La sintassi sequenza[inizio:fine] ci permette di ottenere una nuova sequenza dello stesso tipo che include tutti gli elementi partendo dall’indice inizio (incluso) all’indice fine (escluso). Se inizio è omesso, gli elementi verranno presi dall’inizio, se fine è omesso, gli elementi verranno presi fino alla fine. Questa operazione è chiamata slicing (letteralmente “affettare”).
>>> s = 'Python'
>>> s[0:2] # sottostringa con elementi da 0 (incluso) a 2 (escluso)
'Py'
>>> s[:2] # dall'inizio all'elemento con indice 2 (escluso)
'Py'
>>> s[3:5] # dall'elemento con indice 3 (incluso) a 5 (escluso)
'ho'
>>> s[4:] # dall'elemento con indice 4 (incluso) alla fine
'on'
>>> s[-2:] # dall'elemento con indice -2 (incluso) alla fine
'on'
Contenimento
Gli operatori in e not in possono essere usati per verificare se un elemento fa parte di una sequenza o no. Nel caso delle stringhe, è anche possibile verificare se una sottostringa è contenuta in una stringa:
>>> s = 'Python'
>>> 'P' in s # controlla se il carattere 'P' è contenuto nella stringa s
True
>>> 'x' in s # il carattere 'x' non è in s, quindi ritorna False
False
>>> 'x' not in s # "not in" esegue l'operazione inversa
True
>>> 'Py' in s # controlla se la sottostringa 'Py' è contenuto nella stringa s
True
>>> 'py' in s # il controllo è case-sensitive, quindi ritorna False
False
Concatenamento, ripetizione e lunghezza
È possibile usare l’operatore + per concatenare sequenze, e * per ripetere sequenze:
>>> 'Py' + 'thon'
'Python'
>>> 'Py' * 2
'PyPy'
>>> 'Ba' + 'na' * 2
'Banana'
La funzione built-in len() può essere usata per ottenere il numero di elementi in una sequenza:
>>> len('Python')
6
>>> s = 'Precipitevolissimevolmente'
>>> len(s)
26
Funzioni e Metodi
Prima di procedere, è necessario fare una breve parentesi per spiegare la differenza tra funzioni e metodi.
Abbiamo già visto alcune funzioni come len(). La funzioni accettano 0 o più argomenti e possono essere usate con oggetti di diversi tipi, usando la sintassi funzione(argomenti):
Formattazione delle Stringhe
La maggior parte dei metodi delle stringhe sono semplici da capire. C’è tuttavia un metodo che richiede una spiegazione più dettagliata: str.format(). Questo metodo permette di formattare stringhe, ovvero inserire alcuni valori variabili all’interno di una stringa predefinita:
>>> raggio = 8.4
>>> area = 3.14 * raggio**2
>>> circ = 2 * 3.14 * raggio
>>> s = "L'area è {}, la circonferenza è {}."
>>> s.format(area, circ)
"L'area è 221.5584, la circonferenza è 52.752."
Formattazione “vecchio stile”
Prima dell’implementazione di str.format() veniva usato un altro metodo ispirato alla formattazione eseguita dalla funzione printf di C. Questo metodo usa l’operatore % per separare la stringa di formattazione dagli argomenti, e, anche se il funzionamento è simile a str.format(), questo metodo è meno flessibile.
>>> raggio = 8.4
>>> area = 3.14 * raggio**2
>>> circ = 2 * 3.14 * raggio
>>> s = "L'area è %f, la circonferenza è %f."
>>> s % (area, circ)
"L'area è 221.558400, la circonferenza è 52.752000."
Potete notare che questo metodo usa %f come placeholder invece di {}. Oltre a %f (per i float), esistono anche altri tipi di placeholder, come %d per gli interi o %s per le stringhe.