La condizione if e la logica booleana

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:

  1. Dichiarando esplicitamente l’operatore che si deve utilizzare (i.e. con i comandi and, or e not).

  2. 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