×

Guida completa a Python

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

TipoOrdinataModificabileDuplicatiSintassi
list["a", "b"]
tuple("a", "b")
set{"a", "b"}
dict✅*❌ chiavi{"k": "v"}

🧪 Esercizio pratico

  1. Crea una lista con alcuni nomi
  2. Aggiungi un nome preso da input()
  3. Rimuovi eventuali duplicati
  4. Ordina la lista in ordine alfabetico
  5. 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:

  1. Aggiungere un nome
  2. Rimuovere un nome
  3. Cercare un nome
  4. Visualizzare l’elenco (ordinato, senza duplicati)
  5. 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)

Pagine: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19