Python if, elif, else: gestire uno sconto progressivo in base al comportamento dell’utente

by theArchitect
SHARE
Python if, elif, else: gestire uno sconto progressivo in base al comportamento dell’utente
© Guida-HTML5.it

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

SHARE