La condizione if
e la logica booleana#
Una delle funzioni più utili, e necessaria per la scrittura di qualunque programma non banale in Python, è la funzione if
. La sua struttura di base è la seguente:
if <CONDIZIONE>:
<CORPO_IF>
elif <CONDIZIONE_ALTERNATIVA1>:
<CORPO_ALTERNATIVO1>
elif CONDIZIONE_ALTERNATIVA2:
<CORPO_ALTERNATIVO2>
else:
<CORPO_ALTERNATIVO>
Come è facile intuire, tale codice controllerà se la <CONDIZIONE>
è verificata. In caso affermativo, eseguirà il contenuto di <CORPO_IF>
. Se viceversa è verificata <CONDIZIONE_ALTERNATIVA1>
, verrà eseguito il contenuto di <CORPO_ALTERNATIVO1>
, e così via. Se nessuna condizione contenuta nella catena di elif
viene verificato, viene semplicemente eseguito il contenuto di <CORPO_ALTERNATIVO>
.
Più nello specifico, Python richiede che <CONDIZIONE>
rappresenti una variabile booleana, e il contenuto di <CORPO_IF>
viene eseguito se e solo se tale variabile rappresenta il valore True
. Ad esempio:
# Definire una variabile booleana di check
condizione_vera = True
if condizione_vera:
print("Condizione if verificata")
else:
print("Condizione else verificata")
Condizione if verificata
Chiaramente, tale operazione diventa interessante quando viene usata per confrontare delle variabili. A tal proposito, diventa necessario applicare gli operatori logici di confronto, già introdotti nel capitolo dedicato alle variabili booleane.
Di seguito, scriviamo un programma che informa l’utente se un numero n
preso in input è pari o dispari.
# Definiamo il numero n
n: int = 20
if n%2 == 0: # I numeri pari hanno resto 0 nella divisione per 2
print("Il numero è pari.")
else: # Non ci sono altre possibilità oltre che pari e dispari
print("Il numero è dispari.")
Il numero è pari.
Operatori Logici#
Quando il numero di condizioni da verificare è maggiore di 1, è necessario utilizzare operatori logici (and
, or
, not
, etc.), per connettere tali condizioni. In Python, queste possono essere dichiarate in due modi:
Dichiarando esplicitamente l’operatore che si deve utilizzare (i.e. con i comandi
and
,or
enot
).Utilizzando i sostituti simbolici:
&
<->and
|
<->or
!
<->not
# Dichiariamo tre variabili numeriche
a: int = 4
b: int = 2
c: int = 3
# Controlliamo che la prima sia maggiore della seconda
condizione_1 = a > b
# Controlliamo che la prima sia minore della terza alla seconda
condizione_2 = a < c**2
# Se la prima è verificata, mentre la seconda no, restituire "Ok!"
if (condizione_1) and (not condizione_2):
print("Ok!")
O, equivalentemente:
# Dichiariamo tre variabili numeriche
a: int = 4
b: int = 2
c: int = 3
# Controlliamo che la prima sia maggiore della seconda
condizione_1 = a > b
# Controlliamo che la prima sia minore della terza alla seconda
condizione_2 = a < c**2
# Se la prima è verificata, mentre la seconda no, restituire "Ok!"
if (condizione_1) & (not condizione_2):
print("Ok!")
Note conclusive#
Quando il numero di condizioni da controllare diventa grande, è meglio separare la fase in cui la condizione viene verificata dalla condizione stessa, per migliorare la leggibilità del codice.
Ad esempio, vediamo come scrivere un programma che presi 3 numeri a
, b
e c
, restituisce True
se a
, b
e c
rappresentano le possibili lunghezze dei lati di un triangolo, ricordando che ciò accade se e solo se la somma di ogni coppia di lati è maggiore del terzo lato.
# Scegliamo 3 numeri
a: float = 1.4
b: float = 0.3
c: float = 1.5
condizione = (a + b > c) and (a + c > b) and (b + c > a)
if condizione:
print(True)
else:
print(False)
True