Salta al contenuto
Note per Studenti Stringhe in Python

Stringhe in Python

In questa pagina 7

Letterali

python
s = 'testo'
s = "l'apostrofo va bene tra virgolette doppie"
s = """più
righe"""
s = "tab:\t, a capo:\n, backslash: \\"
r = r"C:\cartella\nuova"          # raw string: i backslash non sono sequenze di escape

Definizione (str). Il tipo è str: sequenza immutabile di caratteri Unicode (vedi Rappresentazione binaria dei datiBasi 2, 8 e 16; interi senza segno e in complemento a 2 con overflow; virgola mobile IEEE 754 e sue approssimazioni; caratteri ASCII, Unicode e UTF-8.Rappresentazione binaria dei dati →). Non esiste un tipo carattere: un carattere è una stringa di lunghezza 1.

Esempio. Con s = "ciao", s[0] = "C" solleva TypeError, mentre "C" + s[1:] costruisce la nuova stringa 'Ciao'.

Indici e slicing

 c  i  a  o     m  o  n  d  o
 0  1  2  3  4  5  6  7  8  9
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Definizione (indici e slicing)

s = "ciao mondo"
s[0], s[-1]          # ('c', 'o')
s[5:]                # 'mondo'
s[:4]                # 'ciao'
s[2:7]               # 'ao mo'  (indice 7 escluso)
s[::2]               # 'ca od'  (passo 2)
s[::-1]              # 'odnom oaic'  (rovesciata)
  • s[i] con i fuori intervallo → IndexError; lo slicing invece non dà mai errore (s[100:] è "").
  • s[i:j] ha lunghezza j - i (per indici validi).
  • s[0] = "C" → TypeError: le stringhe sono immutabili. Si costruisce una stringa nuova: "C" + s[1:].

Esempio. Con s = "ciao mondo", s[2:7] vale 'ao mo' (lunghezza 7−2=57-2=5), s[::-1] vale 'odnom oaic' e s[100:] vale "".

Operatori

python
"ab" + "cd"          # 'abcd'
"ab" * 3             # 'ababab'
"mo" in "mondo"      # True (sottostringa)
len("città")         # 5
"abc" < "abd"        # True: confronto lessicografico per code point
"Zeta" < "alfa"      # True: le maiuscole vengono prima delle minuscole

Metodi principali

Restituiscono sempre una nuova stringa (o altro), l'originale non cambia.

Definizione (metodi principali delle stringhe)

Metodo Esempio Risultato
upper(), lower(), capitalize(), title() "ciao".upper() 'CIAO'
strip(), lstrip(), rstrip() " x \n".strip() 'x'
split(sep) "a,b,,c".split(",") ['a', 'b', '', 'c']
split() senza argomenti " a b ".split() ['a', 'b'] (spazi multipli)
sep.join(seq) "-".join(["a", "b"]) 'a-b'
find(sub), index(sub) "ciao".find("a") 2 (find dà -1 se manca, index solleva ValueError)
count(sub) "banana".count("a") 3
replace(old, new) "aaa".replace("a", "b", 2) 'bba'
startswith(), endswith() "file.py".endswith(".py") True
isdigit(), isalpha(), isspace(), isupper() "123".isdigit() True

Esempio. "a,b,,c".split(",") restituisce ['a', 'b', '', 'c'] e "-".join(["a", "b"]) restituisce 'a-b'.

python
# conteggio delle vocali
vocali = sum(1 for c in testo.lower() if c in "aeiou")

# parole di una frase, senza punteggiatura ai bordi
parole = [p.strip(".,;:!?") for p in frase.split()]

Formattazione: f-string

python
nome, media = "Ada", 27.456
f"{nome} ha media {media:.2f}"        # 'Ada ha media 27.46'
f"{42:5d}|{42:<5d}|{42:05d}"          # '   42|42   |00042'
f"{0.25:.1%}"                         # '25.0%'
f"{x = }"                             # 'x = 3' (utile per il debug)

Definizione (specificatori delle f-string). Specificatori dopo :: allineamento (<, >, ^), larghezza, .n cifre decimali, tipo (d intero, f virgola fissa, e esponenziale, % percentuale). Il metodo "{}".format(x) fa la stessa cosa con sintassi più vecchia.

Esempio. f"{27.456:.2f}" restituisce '27.46' e f"{42:05d}" restituisce '00042'.

Costruire stringhe in un ciclo

Concatenare con += in un ciclo crea a ogni passo una nuova stringa (costo che può diventare quadratico, vedi Complessità computazionaleCosto di un algoritmo in funzione della dimensione dell'input; caso peggiore, migliore e medio; notazione O-grande e classi di crescita; come contare i passi di cicli e ricorsioni; costo delle operazioni Python.Complessità computazionale →). Meglio accumulare i pezzi in una lista e unirli alla fine:

python
pezzi = []
for i in range(1000):
    pezzi.append(str(i))
risultato = ",".join(pezzi)

Errori tipici

  • Credere che un metodo modifichi la stringa: s.upper() da solo non fa niente, serve s = s.upper().
  • "3" + 4 → TypeError: convertire con str(4) o int("3").
  • Confrontare stringhe con maiuscole e minuscole diverse senza normalizzarle (.lower()).
  • Dimenticare che input() restituisce una stringa con eventuali spazi: usare .strip().

Versione ripasso

Errori tipici: Credere che i metodi modifichino la stringa esistente; sommare stringhe e interi ("3" + 4); dimenticare di usare .strip() su input(); confrontare stringhe con maiuscole/minuscole miste senza .lower().

Esercizi su questo argomento

Teoria collegata