Logica booleana e istruzione if
In questa pagina 4
Algebra booleana
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 |
Leggi di De Morgan: e . Servono per negare una condizione composta:
python
# "x NON è in [0, 10]"
not (0 <= x <= 10)
x < 0 or x > 10 # equivalente per De MorganIn 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
and e or valutano il secondo operando solo se serve:
A and B: seAè falso,Bnon viene valutato.A or B: seAè vero,Bnon viene valutato.
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
...and/or restituiscono uno degli operandi, non necessariamente un bool: "" or "default" vale "default".
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.
python
if lista: # equivale a: if len(lista) > 0
...Istruzione if
python
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.
Espressione condizionale
python
segno = "pari" if n % 2 == 0 else "dispari"
massimo = a if a >= b else bmatch (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: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:.