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:
(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 vero e falso: è falso, è vero e è vero; in Python True and False vale False e True or False vale True.
Legge (di De Morgan). Leggi di De Morgan: e . 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:
<,<=,>,>=,==,!=, ein,not in,is,is not. I confronti si possono concatenare:0 <= x < 10significa0 <= x and x < 10. - Logici:
not,and,or(precedenza in quest'ordine).
Corto circuito
Definizione (valutazione a corto circuito).
andeorvalutano il secondo operando solo se serve:
A and B: seAè falso,Bnon viene valutato.A or B: seAè vero,Bnon viene valutato.
Esempio. Con d = 0, d != 0 and 10 / d > 1 vale False e la divisione non viene eseguita: niente ZeroDivisionError.
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/orrestituiscono uno degli operandi, non necessariamente unbool:"" 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.
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
elifsono controllati nell'ordine; si esegue solo il primo vero.elseeelifsono 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.
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:oppureif x in (1, 2):.- Sequenza di
ifindipendenti al posto diif/elif: più rami possono scattare. - Negare una condizione composta senza applicare De Morgan (negare ogni pezzo lasciando
and). - Confrontare con
== True: bastaif cond:.
Versione ripasso
Algebra booleana
Variabili booleane e operatori: negazione (), congiunzione (), disgiunzione (), xor ().
Leggi di De Morgan: e .
In Python
- Tipo
bool:True,False. - Confronti concatenabili (
0 <= x < 10). Operatori logici:not,and,or.
Corto circuito
A and B: seAè falso,Bnon viene valutato.A or B: seAè vero,Bnon viene valutato.and/orpossono 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
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)
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.