W3docs

Python If...Else

Scopri come funzionano le istruzioni Python if, elif ed else — con sintassi, operatori di confronto, operatori logici, condizioni annidate e l'operatore ternario.

Le istruzioni condizionali permettono a un programma Python di scegliere tra percorsi di esecuzione diversi a seconda che una condizione sia vera o falsa. Questo capitolo copre ogni forma di condizionale Python: if, if-else, if-elif-else, if annidato e la forma abbreviata su una riga — insieme agli operatori di confronto e logici che rendono funzionanti le condizioni.

L'istruzione if

L'istruzione if è il condizionale più semplice. Il blocco indentato viene eseguito solo quando la condizione è valutata come True.

if condition:
    # code that runs when condition is True

Esempio

python— editable, runs on the server

Python usa l'indentazione (4 spazi per convenzione) per definire il blocco — non esistono parentesi graffe. Se la condizione è False, il blocco viene semplicemente saltato.

Operatori di Confronto

Le condizioni sono costruite da espressioni che confrontano due valori. Ogni espressione produce un boolean PythonTrue o False.

OperatoreSignificatoEsempioRisultato
==Uguale a5 == 5True
!=Diverso da5 != 3True
>Maggiore di5 > 3True
<Minore di5 < 3False
>=Maggiore o uguale a5 >= 5True
<=Minore o uguale a4 <= 5True

Vedi Python Operators per il riferimento completo agli operatori, inclusi gli operatori aritmetici e di assegnazione.

Operatori Logici

Gli operatori logici combinano più condizioni in un'unica espressione.

OperatoreRestituisce True quando…Esempio
andEntrambe le condizioni sono Truex > 0 and x < 10
orAlmeno una condizione è Truex < 0 or x > 100
notLa condizione è Falsenot logged_in

Esempio — and

python— editable, runs on the server

Esempio — or e not

day = "Saturday"
if day == "Saturday" or day == "Sunday":
    print("It is the weekend")

logged_in = False
if not logged_in:
    print("Please log in")

L'istruzione if-else

Aggiungi una clausola else per gestire il caso in cui la condizione è False.

if condition:
    # runs when condition is True
else:
    # runs when condition is False

Esempio

python— editable, runs on the server

Solo uno dei due blocchi verrà eseguito per una determinata esecuzione.

L'istruzione if-elif-else

Usa elif (abbreviazione di "else if") per testare più condizioni in sequenza. Python le controlla dall'alto verso il basso ed esegue il primo blocco corrispondente. Il blocco else alla fine è un caso generale per quando nessuna delle condizioni corrisponde.

if condition1:
    # runs when condition1 is True
elif condition2:
    # runs when condition2 is True and condition1 is False
elif condition3:
    # runs when condition3 is True and the above are False
else:
    # runs when none of the above are True

Puoi avere tutte le clausole elif di cui hai bisogno, ma solo un if e al massimo un else.

Esempio — classificazione dei voti

python— editable, runs on the server

Perché l'ordine è importante: una volta che Python trova una condizione True, smette di controllare. Se scrivessi score >= 60 per primo, un punteggio di 95 stamperebbe "Grade: C" perché 95 è anche >= 60. Metti sempre la condizione più specifica (più restrittiva) per prima.

Istruzioni if Annidate

Un'istruzione if può apparire all'interno del blocco di un'altra istruzione if. Questo si chiama annidamento ed è utile quando devi applicare un test secondario solo dopo che uno principale è stato superato.

score = 85
if score >= 60:
    if score >= 90:
        print("Grade: A")
    elif score >= 80:
        print("Grade: B")
    else:
        print("Grade: C")
else:
    print("Grade: F")
# Output: Grade: B

Attenzione: un annidamento profondo rende il codice difficile da leggere. Preferisci le catene elif per confronti piatti e considera di estrarre la logica annidata in una funzione quando l'annidamento supera due livelli.

Valori Truthy e Falsy

Python tratta molti valori come implicitamente True o False senza usare un operatore di confronto. I valori considerati False in un contesto boolean sono:

  • None
  • False
  • 0 (intero zero), 0.0 (float zero)
  • "" (string vuota), [] (lista vuota), {} (dict vuoto), () (tupla vuota), set() (set vuoto)

Tutto il resto è considerato True. Questo ti permette di scrivere controlli concisi:

name = "Alice"
if name:
    print("Name is set")      # prints because "Alice" is truthy

items = []
if not items:
    print("The list is empty") # prints because [] is falsy

value = None
if value is None:
    print("No value provided") # use 'is None' for explicit None checks

Usa is None / is not None (non == None) quando verifichi specificatamente None — è la convenzione di stile Python e evita corrispondenze accidentali.

if Abbreviato (Espressione Ternaria)

L'espressione condizionale su una riga di Python assegna uno di due valori in base a una condizione:

value = result_if_true if condition else result_if_false

Esempio

age = 20
status = "adult" if age >= 18 else "minor"
print(status)
# Output: adult

Questo è equivalente a:

if age >= 18:
    status = "adult"
else:
    status = "minor"

Usa la forma ternaria per semplici assegnazioni di valori. Evita di annidarla — a if c1 else b if c2 else c diventa rapidamente illeggibile.

L'istruzione pass

Python richiede almeno un'istruzione all'interno di ogni blocco. Se vuoi definire un ramo if che non fa intenzionalmente nulla (un segnaposto durante lo sviluppo), usa pass:

x = 10
if x > 5:
    pass  # TODO: handle this case later
else:
    print("x is 5 or less")

pass è un'operazione nulla — dice a Python "questo blocco è intenzionalmente vuoto."

L'operatore Walrus := (Python 3.8+)

L'operatore walrus assegna un valore a una variabile e lo verifica nella stessa espressione. È più utile quando hai bisogno del valore testato all'interno del blocco if:

numbers = [1, 2, 3, 4, 5]
if (n := len(numbers)) > 3:
    print(f"List has {n} items, which is more than 3")
# Output: List has 5 items, which is more than 3

Senza :=, avresti bisogno di una riga di assegnazione separata. Le parentesi intorno a n := len(numbers) sono necessarie qui per evitare ambiguità.

Errori Comuni

Usare = invece di ==

# Wrong — this is assignment, not comparison, and causes a SyntaxError in conditions
# if x = 5:

# Correct
if x == 5:
    print("x is five")

Dimenticare i due punti

Ogni riga if, elif ed else deve terminare con :. Un segno due punti mancante produce un SyntaxError.

Indentazione inconsistente

Tutte le istruzioni nello stesso blocco devono usare esattamente la stessa indentazione. Mescolare tabulazioni e spazi causa un IndentationError. Usa sempre 4 spazi, che è lo standard PEP 8.

Quando Usare Cosa

ScenarioScelta migliore
Una condizione, azione singolaif
Due percorsi mutualmente esclusiviif-else
Tre o più percorsiif-elif-else
Test secondario all'interno di un ramoif annidato
Semplice assegnazione di valoreTernario x if c else y
Verifiche di uguaglianza su più valori (Python 3.10+)istruzione match

Pratica

Pratica
What are the correct ways to write an if-else statement in Python?
What are the correct ways to write an if-else statement in Python?

Una volta compresi i condizionali, il passo successivo naturale è ripetere il codice con i cicli while in Python e i cicli for in Python.

Was this page helpful?