In questa lezione impari a
- usare le tuple per dati fissi
- creare dizionari che associano chiavi e valori
- aggiungere, cercare e scorrere i dati di un dizionario
- scegliere la struttura giusta per ogni problema
Le tuple
Una tupla è simile a una lista, ma è immutabile: una volta creata non si può modificare. Si scrive con le parentesi tonde.
punto = (3, 5)
data_nascita = (12, "marzo", 2010)
print(punto[0]) # 3
punto = (3, 5)
punto[0] = 10 # ERRORE: TypeError, le tuple non si modificano
Si usano per dati che non devono cambiare e in cui ogni posizione ha un significato preciso: coordinate, date, colori RGB. L'immutabilità le protegge da modifiche accidentali.
Spacchettare una tupla
punto = (3, 5)
x, y = punto
print(f"x = {x}, y = {y}")
I dizionari
Un dizionario associa a ogni chiave un valore, proprio come un vocabolario associa a ogni parola la sua definizione. Si scrive tra parentesi graffe.
studente = {
"nome": "Marta",
"classe": "3B",
"media": 7.8
}
print(studente["nome"]) # Marta
Invece di ricordarti che il nome è in posizione 0, lo chiami per nome: studente["nome"].
Modificare un dizionario
studente = {"nome": "Marta", "classe": "3B"}
studente["media"] = 7.8 # aggiunge una nuova chiave
studente["classe"] = "4B" # modifica un valore esistente
del studente["media"] # elimina una chiave
print(studente)
Cercare senza errori
Se la chiave non esiste, studente["telefono"] provoca un KeyError. Per evitarlo:
studente = {"nome": "Marta"}
print("telefono" in studente) # False
print(studente.get("telefono", "non presente")) # non presente
Scorrere un dizionario
prezzi = {"pane": 2.5, "latte": 1.2, "uova": 3.0}
for prodotto, prezzo in prezzi.items():
print(f"{prodotto}: {prezzo:.2f} euro")
.keys() dà solo le chiavi, .values() solo i valori, .items() entrambi.
Quale struttura scegliere?
| Lista | Tupla | Dizionario | |
|---|---|---|---|
| Sintassi | [1, 2, 3] |
(1, 2, 3) |
{"a": 1} |
| Modificabile | sì | no | sì |
| Accesso | per posizione | per posizione | per chiave |
| Usala per | elenchi che cambiano | dati fissi | dati con un nome |
Le tuple possono fare da chiave in un dizionario, le liste no: le chiavi devono essere immutabili.
Esercizi
Esercizio 1 – Contare le lettere. Chiedi una parola e conta quante volte compare ogni lettera, usando un dizionario.
Mostra la soluzione
parola = input("Parola: ").lower()
conteggio = {}
for lettera in parola:
conteggio[lettera] = conteggio.get(lettera, 0) + 1
for lettera, volte in conteggio.items():
print(f"{lettera}: {volte}")
get(lettera, 0) restituisce 0 la prima volta che la lettera compare.
Esercizio 2 – La pagella. Crea un dizionario con materie e voti, poi stampa la media e le materie insufficienti.
Mostra la soluzione
pagella = {"Italiano": 7, "Matematica": 5, "Informatica": 9, "Inglese": 6}
media = sum(pagella.values()) / len(pagella)
print(f"Media: {media:.2f}")
for materia, voto in pagella.items():
if voto < 6:
print(f"Insufficiente in {materia}")
Sfida: la rubrica telefonica
Scrivi una rubrica con un menu: aggiungi un contatto, cerca un contatto, mostra tutti, esci. Usa un dizionario con il nome come chiave e il numero come valore. Se si cerca un nome che non c'è, il programma lo deve dire senza bloccarsi.
Mostra la soluzione
rubrica = {}
scelta = ""
while scelta != "0":
print("\n1 Aggiungi 2 Cerca 3 Mostra tutti 0 Esci")
scelta = input("Scelta: ")
if scelta == "1":
nome = input("Nome: ").strip().title()
rubrica[nome] = input("Telefono: ").strip()
print(f"{nome} aggiunto")
elif scelta == "2":
nome = input("Chi cerchi? ").strip().title()
print(rubrica.get(nome, "Contatto non trovato"))
elif scelta == "3":
for nome in sorted(rubrica):
print(f"{nome}: {rubrica[nome]}")
.strip() toglie gli spazi in più, .title() mette la maiuscola iniziale: così "anna " e "Anna" diventano lo stesso contatto. Nell'ultima lezione questa rubrica imparerà a salvarsi su file.