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:
False0,0.0None- 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.