🛒 Esercitazione Recupero: Smart Supermarket Analytics
Rafforza i concetti di cicli, condizioni e liste con un progetto pratico!
📋 Dati Iniziali
# Lista prodotti con prezzi (€)
prodotti = [
"Pane: 1.50€",
"Latte: 1.20€",
"Uova: 2.80€",
"Mele: 3.00€",
"Pasta: 0.90€",
"Carne: 8.50€",
"Formaggio: 4.30€",
"Acqua: 0.50€"
]
🎨 Opzione Bonus: Colorare l’Output
Usa i codici ANSI per colorare il testo nel terminale! È completamente opzionale ma rende il tuo codice più bello.
# Colori del testo (foreground) ROSSO = "\033[31m" VERDE = "\033[32m" GIALLO = "\033[33m" BLU = "\033[34m" VIOLA = "\033[35m" CIANO = "\033[36m" BIANCO = "\033[37m" RESET = "\033[0m"
# Colori di sfondo (background) SFONDO_ROSSO = "\033[41m" SFONDO_VERDE = "\033[42m" SFONDO_GIALLO = "\033[43m" SFONDO_BLU = "\033[44m" SFONDO_VIOLA = "\033[45m" SFONDO_CIANO = "\033[46m" SFONDO_BIANCO = "\033[47m"
# Testo colorato semplice
print(f"{VERDE}Questo testo è verde{RESET}")
print(f"{ROSSO}Questo testo è rosso{RESET}")
# Testo con sfondo colorato
print(f"{SFONDO_GIALLO}{ROSSO}Rosso su sfondo giallo{RESET}")
# Combinazioni (testo + sfondo)
print(f"{SFONDO_BLU}{BIANCO}Testo bianco su sfondo blu{RESET}")
- Per colorare le categorie nella Parte 2 (Economico=Verde, Normale=Giallo, Premium=Rosso)
- Per evidenziare il report nella Parte 3
- Per rendere più visibili i prodotti più caro/economico nella Parte 4
- Per distinguere i suggerimenti sconto
🟢 Pane: 1.50€ → NORMALE
🔴 Carne: 8.50€ → PREMIUM
Nota: Questa è solo una rappresentazione visiva, nel terminale useresti i codici ANSI.
- I colori sono opzionali – non influiscono sul voto
- Non dare per scontato che funzionino su tutti i computer
- Usa sempre
RESETdopo il testo colorato - Testa il tuo codice anche senza colori
- Per combinare testo e sfondo:
print(f"{SFONDO_COLORE}{TESTO_COLORE}testo{RESET}")
Parte 1: Visualizzazione Prodotti (20 min – 15pt)
Stampa tutti i prodotti della lista con una numerazione (1., 2., 3., …)
- Ciclo
forper scorrere la lista enumerate(prodotti, 1)per avere indice che parte da 1print()con f-string per formattare l’output
1. Pane: 1.50€ 2. Latte: 1.20€ 3. Uova: 2.80€ 4. Mele: 3.00€ 5. Pasta: 0.90€ 6. Carne: 8.50€ 7. Formaggio: 4.30€ 8. Acqua: 0.50€
Conta e stampa quanti prodotti ci sono nella lista
len() per contare gli elementi di una lista
# Output atteso: Totale prodotti nel supermercato: 8
Parte 2: Analisi Prezzi (25 min – 35pt)
| Prezzo (€) | Categoria | Colore |
|---|---|---|
| ≤ 1.00€ | ECONOMICO | ● Verde |
| 1.01€ – 3.00€ | NORMALE | ● Arancione |
| > 3.00€ | PREMIUM | ● Rosso |
Per ogni prodotto, estrai il prezzo e determina la categoria
- Per ogni prodotto nella lista:
- Estrai il prezzo dalla stringa (es: da “Pane: 1.50€” prendi “1.50”)
- Converti il prezzo in numero (float)
- Applica le condizioni per determinare la categoria
- Stampa il risultato
Come estrarre il prezzo:
# Ricorda: .split() divide una stringa in una lista
# Esempio: "Pane: 1.50€".split(": ") → ["Pane", "1.50€"]
Pane: 1.50€ → NORMALE Latte: 1.20€ → NORMALE Uova: 2.80€ → NORMALE Mele: 3.00€ → NORMALE Pasta: 0.90€ → ECONOMICO Carne: 8.50€ → PREMIUM Formaggio: 4.30€ → PREMIUM Acqua: 0.50€ → ECONOMICO
Calcola e stampa il prezzo medio di tutti i prodotti
- Crea una variabile per accumulare la somma dei prezzi
- Per ogni prodotto, aggiungi il suo prezzo alla somma
- Alla fine, dividi la somma totale per il numero di prodotti
- Usa
:.2fper formattare il risultato con 2 decimali
# Output atteso: 💰 Prezzo medio: 2.84€
Parte 3: Organizzazione Dati (25 min – 40pt)
Crea 3 liste separate per organizzare i prodotti per categoria
prodotti_economici = []– per prezzo ≤ 1.00€prodotti_normali = []– per prezzo 1.01€ – 3.00€prodotti_premium = []– per prezzo > 3.00€
Attenzione alla logica:
# Ricorda le condizioni corrette: # - ECONOMICO: prezzo ≤ 1.00 # - NORMALE: prezzo ≤ 3.00 (ma > 1.00) # - PREMIUM: prezzo > 3.00
Come aggiungere elementi a una lista:
# Usa il metodo .append()
lista.append(elemento)
# Esempio: prodotti_economici.append("Pasta: 0.90€")
Stampa un report con statistiche e percentuali
- Numero di prodotti per categoria
- Percentuale di prodotti per categoria
- Totale prodotti
Come calcolare le percentuali:
percentuale = (numero_categoria / totale_prodotti) * 100 # Esempio: (2 / 8) * 100 = 25.0%
# Output atteso CORRETTO del report: ======================================== 📊 REPORT SMART SUPERMARKET ======================================== 🟢 Prodotti ECONOMICI: 2 🟠 Prodotti NORMALI: 4 🔴 Prodotti PREMIUM: 2 📦 Totale prodotti: 8 📈 Percentuali: Economici: 25.0% Normali: 50.0% Premium: 25.0%
Stampa le liste dei prodotti organizzate per categoria
enumerate() per numerare i prodotti in ogni lista
# Output atteso CORRETTO: 🟢 PRODOTTI ECONOMICI: 1. Pasta: 0.90€ 2. Acqua: 0.50€ 🟠 PRODOTTI NORMALI: 1. Pane: 1.50€ 2. Latte: 1.20€ 3. Uova: 2.80€ 4. Mele: 3.00€ 🔴 PRODOTTI PREMIUM: 1. Carne: 8.50€ 2. Formaggio: 4.30€
Parte 4: Extra Challenge (20 min – 30pt)
Trova il prodotto più caro e quello più economico
- Crea variabili per memorizzare il prezzo massimo/minimo e il prodotto corrispondente
- Inizializza il massimo a 0 e il minimo a un numero grande (es: 1000)
- Per ogni prodotto, confronta il prezzo con il massimo/minimo corrente
- Se trovi un prezzo più alto/basso, aggiorna le variabili
# Output atteso: 🏆 PRODOTTO PIÙ CARO: Carne: 8.50€ 🏆 PRODOTTO PIÙ ECONOMICO: Acqua: 0.50€
Per i prodotti premium, suggerisci un prezzo scontato del 10%
- Uno sconto del 10% significa pagare il 90% del prezzo originale
- Calcola:
prezzo_scontato = prezzo_originale * 0.90 - Usa la lista
prodotti_premiumcreata nella Parte 3 - Per ogni prodotto premium, estrai il prezzo e calcola lo sconto
# Output atteso CORRETTO: 🎁 SUGGERIMENTI SCONTO: Carne: 8.50€ → con sconto 10%: 7.65€ Formaggio: 4.30€ → con sconto 10%: 3.87€
📊 Output Completo Finale CORRETTO
1. Pane: 1.50€ 2. Latte: 1.20€ 3. Uova: 2.80€ 4. Mele: 3.00€ 5. Pasta: 0.90€ 6. Carne: 8.50€ 7. Formaggio: 4.30€ 8. Acqua: 0.50€ Totale prodotti nel supermercato: 8 Pane: 1.50€ → NORMALE Latte: 1.20€ → NORMALE Uova: 2.80€ → NORMALE Mele: 3.00€ → NORMALE Pasta: 0.90€ → ECONOMICO Carne: 8.50€ → PREMIUM Formaggio: 4.30€ → PREMIUM Acqua: 0.50€ → ECONOMICO 💰 Prezzo medio: 2.84€ ======================================== 📊 REPORT SMART SUPERMARKET ======================================== 🟢 Prodotti ECONOMICI: 2 🟠 Prodotti NORMALI: 4 🔴 Prodotti PREMIUM: 2 📦 Totale prodotti: 8 📈 Percentuali: Economici: 25.0% Normali: 50.0% Premium: 25.0% 🟢 PRODOTTI ECONOMICI: 1. Pasta: 0.90€ 2. Acqua: 0.50€ 🟠 PRODOTTI NORMALI: 1. Pane: 1.50€ 2. Latte: 1.20€ 3. Uova: 2.80€ 4. Mele: 3.00€ 🔴 PRODOTTI PREMIUM: 1. Carne: 8.50€ 2. Formaggio: 4.30€ 🏆 PRODOTTO PIÙ CARO: Carne: 8.50€ 🏆 PRODOTTO PIÙ ECONOMICO: Acqua: 0.50€ 🎁 SUGGERIMENTI SCONTO: Carne: 8.50€ → con sconto 10%: 7.65€ Formaggio: 4.30€ → con sconto 10%: 3.87€
📋 Schema di Valutazione
| Parte | Punti | Tempo | Concetti Valutati |
|---|---|---|---|
| 1 – Visualizzazione | 15 | 20 min | Cicli, enumerate(), len() |
| 2 – Analisi prezzi | 35 | 25 min | If/elif/else, split(), float() |
| 3 – Organizzazione | 40 | 25 min | Liste, append(), percentuali |
| 4 – Bonus | 30 | 20 min | Ricerca max/min, calcoli |
| TOTALE | 120 | → Voto: punti / 12 | |
- Capire come scorrere liste con cicli
for - Usare
enumerate()per avere indici numerati - Applicare condizioni
if/elif/elseper prendere decisioni - Manipolare stringhe con
split()per estrarre dati - Organizzare dati in liste separate
- Calcolare medie e percentuali
- Ricercare valori massimi e minimi in una lista
Ricorda che elif prezzo <= 3.00 include anche il caso in cui il prezzo è esattamente 3.00€!
Quindi "Mele: 3.00€" appartiene alla categoria NORMALE, non PREMIUM.