Salta al contenuto
Note per Studenti Logica booleana e istruzione if

Logica booleana e istruzione if

In questa pagina 4
In questa pagina 4

Algebra booleana

Definizione (operatori booleani NOT, AND, OR e XOR). Variabili con due valori (vero/falso) e tre operatori fondamentali:

AA BB ¬A\lnot A A∧BA \land B A∨BA \lor B A⊕BA \oplus B (xor)
F F V F F F
F V V F V V
V F F F V V
V V F V V F

Esempio. Con AA vero e BB falso: A∧BA\land B è falso, A∨BA\lor B è vero e A⊕BA\oplus B è vero; in Python True and False vale False e True or False vale True.

Legge (di De Morgan). Leggi di De Morgan: ¬(A∧B)=¬A∨¬B\lnot(A \land B) = \lnot A \lor \lnot B e ¬(A∨B)=¬A∧¬B\lnot(A \lor B) = \lnot A \land \lnot B. Servono per negare una condizione composta:

# "x NON è in [0, 10]"
not (0 <= x <= 10)
x < 0 or x > 10          # equivalente per De Morgan

Esempio. Con x = 12, not (0 <= x <= 10) e x < 0 or x > 10 valgono entrambe True.

In Python

  • Tipo bool: True, False.
  • Confronti: <, <=, >, >=, ==, !=, e in, not in, is, is not. I confronti si possono concatenare: 0 <= x < 10 significa 0 <= x and x < 10.
  • Logici: not, and, or (precedenza in quest'ordine).

Corto circuito

Definizione (valutazione a corto circuito). and e or valutano il secondo operando solo se serve:

  • A and B: se A è falso, B non viene valutato.
  • A or B: se A è vero, B non viene valutato.

Esempio. Con d = 0, d != 0 and 10 / d > 1 vale False e la divisione non viene eseguita: niente ZeroDivisionError.

python
if i < len(lista) and lista[i] > 0:   # niente IndexError: se i è fuori, il secondo test non parte
    ...
if d != 0 and n / d > 1:              # niente ZeroDivisionError
    ...

Proprietà (and e or restituiscono un operando). and/or restituiscono uno degli operandi, non necessariamente un bool: "" or "default" vale "default".

Esempio. 0 or 5 restituisce 5 e 3 and 4 restituisce 4.

Truthiness

Definizione (truthiness). In un contesto booleano (if, while, and...) ogni oggetto ha un valore di verità. Sono falsi: False, None, 0, 0.0, "", [], (), {}, set(). Tutto il resto è vero.

Esempio. bool([]) vale False, bool([0]) vale True e bool("") vale False.

python
if lista:            # equivale a: if len(lista) > 0
    ...

Istruzione if

Definizione (istruzione if, elif ed else)

if voto >= 18:
    esito = "promosso"
elif voto >= 15:
    esito = "orale di recupero"
else:
    esito = "respinto"
  • I rami elif sono controllati nell'ordine; si esegue solo il primo vero.
  • else e elif sono facoltativi.
  • Blocco vuoto: pass.

Esempio. Con voto = 16 il primo test è falso, elif voto >= 15 è vero e esito diventa "orale di recupero".

Espressione condizionale

Definizione (espressione condizionale)

segno = "pari" if n % 2 == 0 else "dispari"
massimo = a if a >= b else b

Esempio. Con n = 8, "pari" if n % 2 == 0 else "dispari" restituisce "pari".

match (Python ≥ 3.10)

Confronta un valore con dei pattern; utile al posto di lunghe catene di elif sullo stesso valore.

python
match comando:
    case "su" | "w":
        y -= 1
    case "giù" | "s":
        y += 1
    case _:                 # qualunque altro valore
        print("comando sconosciuto")

Errori tipici

  • if x == 1 or 2: è sempre vero (2 è vero). Corretto: if x == 1 or x == 2: oppure if x in (1, 2):.
  • Sequenza di if indipendenti al posto di if/elif: più rami possono scattare.
  • Negare una condizione composta senza applicare De Morgan (negare ogni pezzo lasciando and).
  • Confrontare con == True: basta if cond:.

Versione ripasso

Algebra booleana

Variabili booleane e operatori: negazione (¬\lnot), congiunzione (∧\land), disgiunzione (∨\lor), xor (⊕\oplus).

Leggi di De Morgan: ¬(A∧B)=¬A∨¬B\lnot(A \land B) = \lnot A \lor \lnot B e ¬(A∨B)=¬A∧¬B\lnot(A \lor B) = \lnot A \land \lnot B.

In Python

  • Tipo bool: True, False.
  • Confronti concatenabili (0 <= x < 10). Operatori logici: not, and, or.

Corto circuito

  • A and B: se A è falso, B non viene valutato.
  • A or B: se A è vero, B non viene valutato. and/or possono restituire un operando non booleano ("" or "default" vale "default").

Truthiness

Valori falsi: False, None, 0, 0.0, "", [], (), {}, set(). Tutto il resto è vero (if lista: controlla se non è vuota).

Istruzione if

python
if condizione1:
    ...
elif condizione2:
    ...
else:
    ...

I rami elif sono controllati in ordine; si esegue solo il primo vero. Blocco vuoto: pass.

Espressione condizionale

risultato = vero if cond else falso

match (Python ≥ 3.10)

python
match comando:
    case "su" | "w":
        ...
    case _:
        ...

Errori tipici

Scrivere if x == 1 or 2: invece di if x in (1, 2):; usare sequenze di if indipendenti al posto di if/elif; negare condizioni composte dimenticandosi di invertire gli operatori logici; confrontare esplicitamente con == True.

Esercizi su questo argomento