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

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.

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
python
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:].

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.

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
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)

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.

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().

Teoria collegata