Introduzione
Il controllo di flusso è uno dei concetti più importanti in Python, perché permette al programma di prendere decisioni. Con if, elif ed else possiamo eseguire blocchi di codice diversi in base a condizioni differenti.
In questo tutorial vedremo un caso pratico e molto utile: calcolare uno sconto progressivo in base al comportamento di un cliente in un e-commerce. L’idea è semplice ma realistica: più un utente è fedele o attivo, più vantaggi riceve.
Questo scenario è perfetto per capire quando usare più condizioni in sequenza, come organizzare le priorità e come scrivere codice leggibile e facile da mantenere.
Codice completo
def calcola_sconto(spesa_totale, numero_ordini, is_premium):
"""
Calcola lo sconto in base al comportamento del cliente.
Regole:
- Premium: 20% di sconto
- Almeno 10 ordini e spesa totale >= 500: 15% di sconto
- Almeno 5 ordini: 10% di sconto
- Altrimenti: nessuno sconto
"""
if is_premium:
sconto = 0.20
categoria = "cliente premium"
elif numero_ordini >= 10 and spesa_totale >= 500:
sconto = 0.15
categoria = "cliente fedele"
elif numero_ordini >= 5:
sconto = 0.10
categoria = "cliente abituale"
else:
sconto = 0.00
categoria = "cliente standard"
importo_sconto = spesa_totale * sconto
totale_finale = spesa_totale - importo_sconto
return {
"categoria": categoria,
"sconto_percentuale": sconto * 100,
"importo_sconto": round(importo_sconto, 2),
"totale_finale": round(totale_finale, 2)
}
# Esempi di utilizzo
clienti = [
{"spesa_totale": 120.0, "numero_ordini": 2, "is_premium": False},
{"spesa_totale": 540.0, "numero_ordini": 12, "is_premium": False},
{"spesa_totale": 80.0, "numero_ordini": 7, "is_premium": False},
{"spesa_totale": 300.0, "numero_ordini": 1, "is_premium": True},
]
for cliente in clienti:
risultato = calcola_sconto(
cliente["spesa_totale"],
cliente["numero_ordini"],
cliente["is_premium"]
)
print(f"Categoria: {risultato[´categoria´]}")
print(f"Sconto: {risultato[´sconto_percentuale´]}%")
print(f"Importo sconto: €{risultato[´importo_sconto´]}")
print(f"Totale finale: €{risultato[´totale_finale´]}")
print("-" * 30) Spiegazione
Vediamo come funziona il codice, passo dopo passo.
1. La funzione calcola_sconto
Abbiamo creato una funzione che riceve tre dati:
- spesa_totale: quanto ha speso il cliente
- numero_ordini: quanti ordini ha effettuato
- is_premium: indica se il cliente ha un abbonamento premium
Questa è una buona pratica perché incapsula la logica di business in un punto solo, rendendo il codice riutilizzabile.
2. La struttura if / elif / else
La catena di condizioni viene valutata dall’alto verso il basso:
- Se is_premium è vero, il cliente riceve subito il 20% di sconto.
- Se non è premium, Python passa al primo elif.
- Se ha almeno 10 ordini e una spesa totale di almeno 500 euro, ottiene il 15%.
- Se non soddisfa questa condizione, si controlla il secondo elif.
- Se ha almeno 5 ordini, riceve il 10%.
- Se nessuna condizione è vera, entra nell’else e non riceve sconto.
Questo ordine è fondamentale: Python si ferma alla prima condizione vera. Per questo motivo, se un cliente premium soddisfa anche le altre condizioni, riceverà comunque il 20%, perché quella verifica viene eseguita per prima.
3. Il calcolo del totale finale
Dopo aver stabilito la percentuale di sconto, il programma calcola:
- importo_sconto = spesa_totale × sconto
- totale_finale = spesa_totale − importo_sconto
Infine, i valori vengono arrotondati a due decimali con round(), utile quando lavoriamo con importi monetari.
4. La stampa dei risultati
Nella parte finale, il ciclo for scorre una lista di clienti di esempio e mostra il risultato di ciascun calcolo. Questo approccio è molto utile nei test, perché ci permette di verificare rapidamente diverse situazioni.
Best practice
Quando usi if, elif, else, ci sono alcune regole pratiche che migliorano la qualità del codice.
- Ordina le condizioni dalla più specifica alla più generale: evita che una condizione più ampia “mangi” quelle più precise.
- Usa nomi chiari per le variabili: numero_ordini è molto meglio di x.
- Evita condizioni troppo lunghe: se diventano complesse, valuta di dividere il problema in funzioni più piccole.
- Non annidare troppo gli if: una catena ben strutturata è spesso più leggibile di tanti blocchi annidati.
- Documenta le regole di business: in un sistema reale, gli sconti cambiano spesso e il codice deve essere comprensibile anche dopo mesi.
- Testa i casi limite: per esempio, spesa zero, numero ordini negativo o valori esattamente al confine tra una fascia e l’altra.
Un altro consiglio importante: se hai molte regole di sconto, potresti valutare una struttura dati o una configurazione esterna invece di scrivere una lunga catena di elif. In questo tutorial, però, la catena condizionale è perfetta per imparare il meccanismo base.
Riepilogo
In questo tutorial abbiamo visto come usare if, elif ed else per gestire uno scenario concreto: assegnare uno sconto progressivo a un cliente in base al suo comportamento.
- if controlla la prima condizione.
- elif permette di aggiungere alternative in ordine di priorità.
- else gestisce il caso finale, quando nessuna condizione è vera.
Questo pattern è molto comune in Python e compare in tantissimi contesti: validazione dei dati, gestione di menu, classificazione di utenti, calcolo di prezzi, workflow applicativi e molto altro.
Se impari a scrivere bene queste strutture, il tuo codice diventa più chiaro, più affidabile e più facile da estendere.
Approfondisci con risorse ufficiali
- Documentazione Python sulle istruzioni if: Python Reference Manual - if statement
- Tutorial ufficiale Python: Control Flow Tools
- Funzione round(): Built-in Functions - round
- Tipi numerici in Python: Numeric Types
