Vai al contenuto

Tuple e dizionari

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.