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,orenot).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