Corso Python / Stringhe: indici, slice, metodi e formattazione
Una stringa Python è una sequenza ordinata di testo: puoi leggerne una posizione con un indice o una parte con una slice. Le stringhe sono immutabili, quindi metodi come strip() e replace() restituiscono un valore da usare o assegnare, senza modificare il testo originale.
Leggere posizioni e intervalli
L’indice 0 indica il primo elemento; -1 indica l’ultimo. La slice text[start:stop] include l’inizio ed esclude la posizione finale. Nell’esempio seguente l’intervallo da 1 a 4 seleziona le posizioni 1, 2 e 3:
text = "Python"
print(text[0], text[-1], text[1:4])
Il risultato è P n yth. Una singola posizione fuori dall’intervallo, come text[99], genera IndexError; una slice come text[1:99] restituisce invece la parte disponibile, cioè ython. Anche una stringa vuota non ha una posizione 0, mentre una sua slice può restituire una stringa vuota.
La lunghezza di str conta punti di codice Unicode, non byte né necessariamente caratteri visibili. Una lettera con un segno combinante o un’emoji composta può occupare più posizioni pur apparendo come un unico simbolo. Per esempio "e\u0301", una e seguita da accento combinante, ha lunghezza 2. La documentazione del tipo str definisce sequenze e metodi delle stringhe.
Pulire e formattare un dato completo
Salva il programma seguente nel file UTF-8 strings.py, dentro una cartella di esercitazione. Non richiede pacchetti esterni. Esegui python strings.py con l’interprete del progetto selezionato; su macOS o Ubuntu, fuori dall’ambiente virtuale, usa python3 se è il comando dell’interprete scelto.
raw = " lunch,8000 "
clean = raw.strip()
name, amount_text = clean.split(",")
amount = int(amount_text)
print(clean)
print(name.upper())
print(f"{name}: {amount:,} KRW")
print("-".join(["2026", "10", "17"]))
Il risultato atteso è:
lunch,8000
LUNCH
lunch: 8,000 KRW
2026-10-17
raw contiene spazi ai bordi. strip() produce clean senza quegli spazi; split(",") separa nome e testo dell’importo. L’assegnazione a due nomi richiede esattamente due elementi. int() converte il secondo in numero, upper() produce il nome in maiuscolo e l’f-string mostra l’importo con separatore delle migliaia.
La data finale è soltanto la concatenazione di tre stringhe con un trattino: join() non verifica che anno, mese e giorno formino una data valida. L’esempio mantiene KRW, i won sudcoreani, e i dati originali per rendere confrontabili codice e risultato.
Scegliere tra split, join e strumenti per dati strutturati
split() produce una lista di parti; join() le riunisce usando la stringa su cui viene chiamato come separatore. Gli elementi da unire devono essere stringhe: inserire direttamente un intero causa TypeError. Converti il numero con str() quando la sua rappresentazione testuale è proprio quella desiderata.
La divisione con split(",") va bene per il formato semplice e noto dell’esempio. Non interpreta però virgolette, virgole dentro un campo o campi su più righe. Per un file CSV, cioè valori separati da delimitatori secondo regole di quoting, usa il modulo csv della libreria standard. Un nome come "pranzo, ufficio" non va trattato come due campi solo perché contiene una virgola.
Le f-string sono adatte a costruire messaggi per il lettore, come nell’esempio di input e output con un importo. Non usarle per inserire input esterno nei valori di una query SQL: passa i valori con i parametri del driver del database. Formattare una frase e costruire una query sono compiti distinti.
Controllare immutabilità e casi limite
Chiamare raw.strip() e ignorarne il risultato lascia raw invariato. Lo stesso vale per replace(): per conservare il risultato devi assegnarlo. Usare nomi separati come raw e clean permette di mantenere il dato originale e controllare la trasformazione.
- Aggiungi spazi prima e dopo
lunch,8000: il risultato pulito deve restare uguale. Ripristina poi la stringa originale. - Rimuovi la virgola: la divisione restituisce un solo elemento e l’assegnazione a due nomi genera
ValueError. Anche una virgola aggiuntiva produce un numero di parti diverso da quello richiesto. - Prova separatamente
text[0] = "p"context = "Python": compareTypeError, perché non puoi cambiare una posizione della stringa. Per ottenere un testo diverso devi costruire una nuova stringa e assegnarla.
Queste operazioni normalizzano un formato conosciuto; non certificano la validità dei dati. Il programma accetta un nome vuoto e importi negativi convertibili in interi. Gli spazi interni al nome restano, perché strip() interviene solo ai bordi del testo su cui è chiamato. Verifica separatamente struttura, contenuto dei campi e regole ammesse.




