Lezione 6: Condizioni con if, else e elif

Benvenuto/a! In questa lezione impari a scrivere condizioni if, else e elif in Python, a creare blocchi di codice indentati correttamente e ad affrontare condizioni semplici con esempi pratici. Queste competenze sono alla base di ogni programma che deve decidere cosa fare in base ai dati in ingresso.


🔗 Ripassi consigliati :
• Lezione 2 – Il tuo primo script: Hello, Python!https://www.saperesemplice.com/primo-script-python-hello/
• Lezione 3 – Variabili e Tipi di Datohttps://www.saperesemplice.com/variabili-tipi-dato-python/
• Lezione 4 – Input e Outputhttps://www.saperesemplice.com/lezione-3-input-output-python/
Percorso Python – Programmare da zerohttps://www.saperesemplice.com/corsi-informatica/corsi-di-informatica-python/


Dettagli lezione

⏱️ Tempo stimato: 25–30 minuti
🧩 Difficoltà: Facile
🎯 Obiettivi specifici

  • Comprendere la sintassi di if, elif, else e quando usarli.
  • Scrivere condizioni semplici leggibili usando operatori di confronto e logici.
  • Indentare i blocchi di codice in modo corretto (4 spazi) ed evitare errori comuni.
  • Applicare truthiness, condizioni annidate e la conditional expression (x if cond else y).

🧱 Blocchi di codice indentati in Python

In Python l’indentazione definisce i blocchi: non ci sono parentesi graffe come in altri linguaggi. Dopo due punti : si indenta la riga successiva per indicare il blocco che appartiene a quella struttura (if, elif, else, for, funzioni, ecc.).
Regola pratica: usa 4 spazi per ogni livello di indentazione (coerenti in tutto il file). Evita di mescolare tab e spazi.

# Esempio di blocco indentato
age = 18
if age >= 18:
    print("Access granted")  # questa riga appartiene al blocco dell'if
print("Done")                 # questa riga è fuori dal blocco

💡 Best practice: mantieni un’indentazione costante e leggibile, soprattutto quando annidi più livelli.

Errori frequenti di indentazione

if True:
print("Hello")       # ❌ IndentationError: expected an indented block

if True:
    print("Hello")   # ✅ corretto
# ❌ Evita di mescolare TAB e spazi: può causare errori difficili da diagnosticare
if True:
\tprint("Hello")      # (tab) → potrebbe creare conflitti se il resto usa spazi

Domanda per te: quale tool o impostazione dell’editor usi per visualizzare i caratteri invisibili e garantire 4 spazi per tab?


🔍 Condizioni semplici con if

La forma base di if esegue un blocco solo quando la condizione è truthy.

# Sintassi base
if condition:
    # block
    ...

# Esempi
temperature = 31
if temperature > 30:
    print("It's a hot day")

name = ""
if not name:
    print("Please, enter your name")

👀 Truthiness: sono considerati falsy False, None, 0, contenitori vuoti ("", [], {}, set()), range vuoti. Tutto il resto è truthy.

Errore comune da evitare

Confondere = con == nelle condizioni. = è assegnazione (e non è valido dentro l’espressione del if), == è confronto. In Python scrivere if x = 5: causa SyntaxError. Usa sempre == per confrontare.

Esempio pratico 1 — Accesso semplice

user_age = 16
if user_age >= 18:
    print("Welcome")
else:
    print("Sorry, you must be 18+")

🔄 if + else: due rami alternativi

Quando ci sono due scenari mutuamente esclusivi, usa else.

balance = 25
price = 40
if balance >= price:
    print("Purchase completed")
else:
    print("Insufficient funds")

Esempio pratico 2 — Validazione input minimale

email = ""
if email:
    print("Thanks! We'll contact you soon")
else:
    print("Please provide an email address")

🎯 Consiglio: per messaggi all’utente, usa frasi in inglese (es. Purchase completed, Please provide an email address) per abituarti a standard internazionali.


🪜 elif: più condizioni in sequenza

Usa elif quando devi testare più alternative in ordine di priorità. Il primo blocco la cui condizione è truthy viene eseguito; gli altri vengono saltati.

score = 72
if score >= 90:
    print("Grade: A")
elif score >= 75:
    print("Grade: B")
elif score >= 60:
    print("Grade: C")
else:
    print("Grade: D")

Esempio pratico 3 — Tariffa spedizione

weight = 1.8
if weight <= 1:
    print("Shipping: 4.99€")
elif weight <= 2:
    print("Shipping: 6.99€")
elif weight <= 5:
    print("Shipping: 9.99€")
else:
    print("Shipping: 14.99€")

Domanda per te: come cambieresti la sequenza elif se volessi priorità diverse (es. prima controllare weight > 10)?


🧩 Condizioni composte e precedence

Combina condizioni con and, or, not. Ricorda la precedenza: not > and > or. Per chiarezza, usa parentesi.

age = 20
has_id = True
country = "IT"
if (age >= 18 and has_id) or country != "IT":
    print("Access granted")

Esempio pratico 4 — Form di login (semplificato)

username = "admin"
password = "1234"
if username == "admin" and password == "1234":
    print("Login successful")
else:
    print("Invalid credentials")

✂️ Conditional expression (operatore ternario in Python)

Quando vuoi calcolare un valore in base a una condizione in una sola riga:

# Sintassi: <val_true> if <condizione> else <val_false>
items = 0
message = "No items" if items == 0 else "Items in cart"
print(message)

⚠️ Errore comune da evitare
Abusare del ternario per concatenare molte condizioni. Se le alternative sono più di due, meglio una serie di if/elif/else ordinata.


🔶 Esempi pratici guidati

1) Controllo numero positivo/negativo/zero (condizioni semplici)

n = -3
if n > 0:
    print("Positive")
elif n == 0:
    print("Zero")
else:
    print("Negative")

2) Messaggi in base all’orario (branching semplice)

hour = 14
if 0 <= hour < 12:
    print("Good morning")
elif 12 <= hour < 18:
    print("Good afternoon")
else:
    print("Good evening")

3) Menu testuale minimale (blocchi indentati)

print("1) Start")
print("2) Settings")
print("3) Quit")
choice = 2
if choice == 1:
    print("Starting...")
elif choice == 2:
    print("Opening settings...")
else:
    print("Bye!")

4) Validazione registrazione (condizioni composte + else finale)

username = "alice"
email = ""
password = "secret"

if not username:
    print("Username required")
elif not email:
    print("Email required")
elif len(password) < 6:
    print("Password too short")
else:
    print("Registration complete")

Domanda per te: in quale dei casi qui sopra useresti una conditional expression invece di un blocco if completo? Perché?


📖 Sezione teorica

  • Condizioni semplici con if eseguono un blocco quando l’espressione è truthy.
  • Blocchi di codice indentati: 4 spazi, niente mix tab/spazi; l’indentazione fa parte della sintassi.
  • elif gestisce alternative multiple; viene eseguito solo il primo ramo vero.
  • else raccoglie l’ultimo caso, quando nessuna condizione precedente è vera.
  • Precedenza logica: not > and > or (usa parentesi per chiarezza).
  • Ternario (x if cond else y****************) per restituire rapidamente un valore in base a una condizione.

🔗 Riferimenti utili e affidabili:
• Documentazione ufficiale – if/elif/else (compound statements) → https://docs.python.org/3/reference/compound_stmts.html#if
PEP 8 – Style Guide (indentazione: 4 spazi, niente mix tab/spazi) → https://peps.python.org/pep-0008/
• Approfondimento: Control Flow in Pythonhttps://realpython.com/python-control-flow/


📚 Glossario tecnico

  • Indentazione: spazi all’inizio della riga che definiscono il livello del blocco. In Python è significativa.
  • Blocco (block): insieme di istruzioni associate a una struttura di controllo (es. if).
  • Truthiness/Falsiness: regole con cui oggetti sono interpretati come veri/falsi nelle condizioni.
  • Conditional expression: forma compatta A if cond else B che restituisce un valore.

📝 Esercizio finale

Scrivi uno script che simuli la scelta di un piano di abbonamento in base a input (puoi simulare con variabili).

Requisiti:

  1. Se l’utente ha meno di 18 anni, stampa “Junior plan”; se ha tra 18 e 25, “Young plan”; tra 26 e 65, “Standard plan”; oltre 65, “Senior plan”.
  2. Se l’utente ha un codice promo non vuoto, applica un messaggio aggiuntivo “Promo applied”.
  3. Usa blocchi indentati corretti e almeno un elif.
  4. Extra: usa un’espressione ternaria per generare il testo “Email provided” / “Email missing”.

Schema d’aiuto (esempio):

age = 27
email = ""
promo_code = "WELCOME10"
# Your code here...

🧠 Quiz finale

Non guardare le risposte subito! Sono più sotto 👇

  1. Quale riga definisce un blocco per l’if?
    A) if condazione:
    B) if condizione: + riga successiva indentata
    C) if (condizione) senza :
  2. In quale ordine vengono valutati gli operatori logici?
    A) and > or > not
    B) not > and > or
    C) or > and > not
  3. Cosa succede nella catena if/elif/elif/else?
    A) Vengono eseguiti tutti i rami veri
    B) Viene eseguito solo il primo ramo vero
    C) Viene eseguito sempre l’else
  4. Qual è un errore comune nelle condizioni?
    A) Usare == per confronti
    B) Dimenticare i : dopo if/elif/else
    C) Usare 4 spazi per l’indentazione
  5. Qual è la forma corretta del ternario in Python?
    A) cond ? A : B
    B) A if cond else B
    C) A unless cond else B
  6. Quale messaggio produce questo codice?
n = 0
if n:
    print("Not zero")
else:
    print("Zero")

A) Not zero
B) Zero
C) Errore di sintassi

  1. Quale riga è più sicura/leggibile?
    A) if a and b or c:
    B) if (a and b) or c:
    C) if a && b || c:

❓ FAQ

1) Posso scrivere if su una sola riga?
Sì, if cond: statement, ma usalo con moderazione per non perdere leggibilità.

2) È consigliato annidare molti if?
Meglio evitare troppi livelli. Spezza il problema in funzioni o usa elif ben ordinati.

3) Posso confrontare contro None con ==?
Si preferisce is/is not (if x is None:) per chiarezza semantica.

4) Come evito errori di indentazione?
Configura l’editor per inserire 4 spazi al tasto Tab, visualizza i caratteri invisibili, attiva il linter.

5) Meglio elif o catene di if separati?
Usa elif quando le condizioni sono mutuamente esclusive; catene di if indipendenti quando vuoi valutare più condizioni anche se precedenti sono vere.


Esterni
Python Language Reference – ********************if: https://docs.python.org/3/reference/compound_stmts.html#if
PEP 8 – Indentation: https://peps.python.org/pep-0008/
Control Flow in Python (guida e casi pratici): https://realpython.com/python-control-flow/

Interni SapereSemplice
• Lezione 2 – Primo script Python: https://www.saperesemplice.com/primo-script-python-hello/
• Lezione 3 – Variabili e Tipi di Dato: https://www.saperesemplice.com/variabili-tipi-dato-python/
• Lezione 4 – Input e Output: https://www.saperesemplice.com/lezione-3-input-output-python/
• Percorso “Corsi Python – Programmare da zero”: https://www.saperesemplice.com/corsi-informatica/corsi-di-informatica-pthon/



🔁 Collegamento alla lezione successiva

➡️ **Prosegui alla Lezone 7: *Condizioni complesse e annidate
(Il link verrà inserito non appena l’articolo sarà online.)


🗨️ Hai dubbi? Lascia un commento!
📩 Vuoi il PDF della lezione? Scrivici!
🔗 Condividi con un compagno di corso.


🧪 Risposte del quiz (mostra solo dopo aver provato)

  1. B
  2. B
  3. B
  4. B
  5. B
  6. B
  7. B

📅 Aggiornato il 21/08/2025

Lascia un commento