Guida completa a Python
📘 Capitolo 5 – Strutture Dati in Python
Le strutture dati ti permettono di organizzare e gestire gruppi di valori in modo pratico. Python ne ha diverse di base:
1. Liste (list
)
Le liste sono raccolte ordinate e modificabili di elementi.
frutti = ["mela", "banana", "kiwi"]
print(frutti[0]) # mela
frutti.append("pera") # aggiunge in fondo
frutti.remove("kiwi") # rimuove un elemento
print(len(frutti)) # 3
🔁 Puoi scorrerle con un ciclo:
for frutto in frutti:
print(frutto)
📌 Supportano tipi misti:
cose = [42, "ciao", True, 3.14]
2. Tuple (tuple
)
Le tuple sono simili alle liste, ma sono immutabili (non modificabili).
coordinate = (10, 20)
print(coordinate[1]) # 20
📌 Utile per valori fissi o per restituire più valori da una funzione:
def info():
return "Luca", 25
nome, eta = info()
3. Set (set
)
I set sono collezioni non ordinate, senza duplicati.
numeri = {1, 2, 3, 3, 4}
print(numeri) # {1, 2, 3, 4}
numeri.add(5)
numeri.discard(2)
📌 Perfetti per:
- Eliminare duplicati da una lista
- Fare operazioni tipo unione, intersezione, differenza
a = {1, 2, 3}
b = {3, 4, 5}
print(a & b) # intersezione ➝ {3}
print(a | b) # unione ➝ {1,2,3,4,5}
4. Dizionari (dict
)
I dizionari contengono coppie chiave:valore, come mini-database.
persona = {
"nome": "Anna",
"eta": 28,
"attiva": True
}
print(persona["nome"]) # Anna
persona["eta"] += 1 # aggiorna
persona["email"] = "a@x.it" # aggiunge chiave
🔁 Puoi scorrerli con:
for chiave, valore in persona.items():
print(chiave, ":", valore)
Tabella riepilogativa
Tipo | Ordinata | Modificabile | Duplicati | Sintassi |
---|---|---|---|---|
list | ✅ | ✅ | ✅ | ["a", "b"] |
tuple | ✅ | ❌ | ✅ | ("a", "b") |
set | ❌ | ✅ | ❌ | {"a", "b"} |
dict | ✅* | ✅ | ❌ chiavi | {"k": "v"} |
🧪 Esercizio pratico
- Crea una lista con alcuni nomi
- Aggiungi un nome preso da
input()
- Rimuovi eventuali duplicati
- Ordina la lista in ordine alfabetico
- Stampa la lista finale
Soluzione in Python
# 1. Lista iniziale di nomi
nomi = ["Luca", "Anna", "Marco", "Anna", "Giulia"]
# 2. Aggiunta di un nuovo nome da input
nuovo_nome = input("Inserisci un nome da aggiungere: ").strip().capitalize()
nomi.append(nuovo_nome)
# 3. Rimuoviamo i duplicati convertendo in set e poi di nuovo in lista
nomi_senza_duplicati = list(set(nomi))
# 4. Ordiniamo la lista in ordine alfabetico
nomi_senza_duplicati.sort()
# 5. Stampiamo il risultato
print("\nLista dei nomi (senza duplicati e ordinata):")
for nome in nomi_senza_duplicati:
print("-", nome)
Cosa abbiamo imparato qui?
- Uso di liste e
append()
- Normalizzazione input con
.strip()
e.capitalize()
- Rimozione duplicati con
set()
- Ordinamento con
.sort()
- Iterazione con
for
🧪 Esercizio pratico (un po’ più complesso!)
Complichiamo un po’ il gioco: trasformiamo il nostro script in una mini-app interattiva da terminale, dove l’utente può:
- Inserire più nomi
- Continuare finché non scrive “fine”
- Rimuovere automaticamente duplicati (case-insensitive)
- Ordinare tutto alfabeticamente
- Stampare la lista finale in modo ordinato
Versione avanzata: inserimenti multipli, senza duplicati e ordinata
print("=== Raccolta Nomi ===")
print("Inserisci un nome alla volta. Scrivi 'fine' per terminare.\n")
nomi = []
while True:
nome = input("Nome: ").strip()
if nome.lower() == "fine":
break
# Normalizziamo il nome: prima lettera maiuscola, il resto minuscolo
nome_formattato = nome.capitalize()
nomi.append(nome_formattato)
# Rimuoviamo duplicati ignorando maiuscole/minuscole
# Esempio: "Anna", "anna", "ANNA" ➝ uno solo
nomi_unici = list({n.lower(): n.capitalize() for n in nomi}.values())
# Ordiniamo la lista
nomi_ordinati = sorted(nomi_unici)
# Stampiamo il risultato
print("\n📋 Lista finale dei nomi (senza duplicati):")
for nome in nomi_ordinati:
print("-", nome)
Cosa abbiamo aggiunto?
- Inserimento multiplo con ciclo
while
- Comando
"fine"
per terminare - Normalizzazione del testo per evitare duplicati tipo
"ANNA"
e"anna"
- Rimozione duplicati tramite dizionario
{.lower(): .capitalize()}
💡 - Ordinamento finale
🧪 Esercizio pratico (complesso!)
Gestione nomi” con menu
Il programma permetterà di:
- Aggiungere un nome
- Rimuovere un nome
- Cercare un nome
- Visualizzare l’elenco (ordinato, senza duplicati)
- Uscire dal programma
✅ Versione con menu interattivo
def mostra_menu():
print("\n=== Menu Gestione Nomi ===")
print("1 - Aggiungi un nome")
print("2 - Rimuovi un nome")
print("3 - Cerca un nome")
print("4 - Mostra tutti i nomi")
print("5 - Esci")
def normalizza_nome(nome):
return nome.strip().capitalize()
def mostra_nomi(nomi):
if not nomi:
print("⚠️ La lista è vuota.")
else:
print("\n📋 Elenco nomi:")
for nome in sorted(nomi):
print("-", nome)
# Inizializzazione lista
nomi = []
while True:
mostra_menu()
scelta = input("Scegli un'opzione (1-5): ").strip()
if scelta == "1":
nuovo_nome = normalizza_nome(input("Inserisci il nome da aggiungere: "))
if nuovo_nome not in nomi:
nomi.append(nuovo_nome)
print(f"✅ '{nuovo_nome}' aggiunto!")
else:
print(f"⚠️ '{nuovo_nome}' è già presente.")
elif scelta == "2":
da_rimuovere = normalizza_nome(input("Nome da rimuovere: "))
if da_rimuovere in nomi:
nomi.remove(da_rimuovere)
print(f"🗑️ '{da_rimuovere}' rimosso!")
else:
print(f"⚠️ '{da_rimuovere}' non trovato.")
elif scelta == "3":
da_cercare = normalizza_nome(input("Nome da cercare: "))
if da_cercare in nomi:
print(f"🔍 '{da_cercare}' è presente nella lista.")
else:
print(f"❌ '{da_cercare}' non è nella lista.")
elif scelta == "4":
mostra_nomi(nomi)
elif scelta == "5":
print("👋 Uscita dal programma. Ciao!")
break
else:
print("⚠️ Scelta non valida. Riprova.")
Funzionalità extra gestite:
- Tutti i nomi sono formattati correttamente
- Non ci sono duplicati
- Il menu è chiaro, ripetibile e funzionale
- È facile da estendere con nuove opzioni (es. salvataggio su file)