Menu

if, elif, else in Python: istruzioni condizionali e operatore ternario

Come funzionano le istruzioni if, elif ed else di Python, compresi i valori truthy, le condizioni annidate e l'espressione if ternaria.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Una decisione, scritta quasi in inglese

if è il primo strumento a cui ricorre la maggior parte dei programmi. Permette al tuo codice di prendere una strada quando una condizione è vera e un'altra quando non lo è. Python lo scrive in modo diretto:

Due righe, una decisione. La riga dell'if termina con i due punti. La riga indentata sotto è il corpo dell'if, cioè il codice che viene eseguito se la condizione è vera. Se hour fosse 15, il corpo verrebbe saltato del tutto e non verrebbe stampato niente.

Qui la struttura è data dall'indentazione. Python capisce quali righe appartengono all'if guardando gli spazi iniziali. Per convenzione si usano quattro spazi per livello; sii coerente.

Aggiungere un ramo else

Spesso vuoi che succeda qualcosa in entrambi i casi: questo quando la condizione è vera, quello altrimenti. Si fa con else:

La riga dell'else non ha condizione: raccoglie tutto quello che l'if non ha catturato.

Più rami con elif

Per più di due strade, impila clausole elif ("else if") tra if ed else:

Python scorre le condizioni dall'alto verso il basso ed esegue il blocco della prima che risulta vera. Le altre vengono saltate. Questo ordine conta: se metti score >= 60 prima di score >= 90, tutti prendono D, perché vince la prima condizione vera.

Una struttura ordinata da tenere a mente: per ogni input le condizioni dovrebbero escludersi a vicenda, e l'ordine dovrebbe riflettere il modo naturale in cui pensi al problema. Metti prima i casi più specifici e per ultimi quelli più generali.

Valori truthy nelle condizioni

L'espressione nell'if non deve per forza valere esattamente True o False. Python accetta qualsiasi valore e ne decide la truthiness, cioè se conta come vero:

if items: si legge "se la lista contiene qualcosa". I valori falsy includono:

  • False
  • 0, 0.0
  • None
  • I contenitori vuoti: "", [], {}, set(), ()

Tutto il resto è truthy. Sfruttare la truthiness rende il codice più naturale da leggere, con un'avvertenza: se lo zero è un valore significativo (un contatore che vale legittimamente zero), confronta esplicitamente con is not None o != 0 per evitare la confusione tra "vuoto" e "zero".

Combinare condizioni

and, or e not ti permettono di costruire condizioni composte:

Quando gli estremi condividono un valore centrale, i confronti concatenati sono più ordinati di un and esplicito:

Equivale a 18 <= age and age < 65, ma si legge come una disuguaglianza matematica.

Istruzioni if annidate

Puoi mettere un if dentro un altro if. È consentito, e a volte è la struttura più chiara, ma è anche il modo principale in cui il codice condizionale diventa difficile da seguire. Se ti ritrovi a tre livelli di profondità, valuta di appiattirlo con dei return anticipati (quando scriverai funzioni) o combinando le condizioni:

Funzionano entrambi. Scegli la versione che si legge meglio per chi non ha mai visto questo codice.

L'espressione ternaria

Quando vuoi solo che un valore sia una di due cose a seconda di una condizione, Python ha una forma compatta:

Leggila da sinistra a destra: "warm se temp è almeno 70, altrimenti cool". È ottima per brevi assegnazioni del tipo o questo o quello. Smetti di usarla quando i rami si allungano o contengono più operazioni: a quel punto un blocco if/else completo è più facile da leggere.

if è un'espressione in un solo caso

A differenza di altri linguaggi, l'istruzione if di Python non produce un valore. Solo la forma ternaria lo fa. Non puoi scrivere x = if ...: come faresti in Rust o Kotlin. Se vuoi un valore condizionale, usa il ternario; se vuoi un comportamento condizionale, usa un blocco if completo.

Un piccolo esempio completo

Un programma veloce che classifica una temperatura:

Nota che la logica consiste soprattutto nel decidere quale deve essere advice. Si capisce a colpo d'occhio quale intervallo di temperatura corrisponde a quale messaggio. È questa la forma a cui puntare quando scrivi condizioni: ogni ramo dovrebbe essere piccolo e l'intenzione generale evidente.

Cosa viene dopo

Le condizioni permettono al tuo codice di scegliere una strada. I cicli gli permettono di ripetere. Prossimo argomento: i cicli for, di gran lunga i più usati in Python e i compagni naturali delle collezioni che incontrerai qualche pagina più avanti.

Domande frequenti

Come funziona un'istruzione if in Python?

if condition: seguito da un blocco indentato esegue il blocco solo quando la condizione è vera. Le clausole facoltative elif (else if) ti permettono di controllare altre condizioni, e un else facoltativo viene eseguito quando nessun'altra condizione è stata soddisfatta.

Python ha un'istruzione switch?

Python 3.10 ha aggiunto match/case per il pattern matching strutturale, che copre la maggior parte degli usi di uno switch e anche di più. Per le ramificazioni semplici, una catena di if/elif è ancora comune e va benissimo.

Cos'è l'if ternario in Python?

Un'espressione condizionale su una riga: result = a if condition else b. Si legge da sinistra a destra: valuta a quando condition è vera, altrimenti valuta b. Comoda per brevi assegnazioni del tipo o questo o quello; meno leggibile quando i rami si allungano.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA