Condizioni: if, else ed elif

Bentornato.
Nella lezione precedente hai imparato a usare input().
I tuoi programmi hanno imparato a fare domande.
Molto educati.
Molto interattivi.
Un po’ sospetti.
Hai scritto programmi come:
name = input("What is your name? ")
age = int(input("How old are you? "))
print(f"Hello, {name}!")
print(f"Next year you will be {age + 1}.")
Bene.
Ora il tuo programma può chiedere informazioni all’utente.
Ma non può ancora prendere decisioni.
Fa sempre la stessa cosa.
I programmi reali hanno bisogno di scelte.
Per esempio:
Se l’utente è abbastanza grande, permetti l’accesso.
Se la password è corretta, fai login.
Se il prodotto è disponibile, mostra “Buy now”.
Se il numero è negativo, mostra un avviso.
Ed è qui che entrano in scena le condizioni.
Le condizioni permettono al programma di scegliere cosa fare.
Senza condizioni, un programma è come un treno senza scambi.
Va avanti.
Sempre avanti.
Anche quando i binari finiscono.
Non ideale.
Cosa imparerai
In questa lezione imparerai:
- cosa sono le condizioni;
- come funziona
if; - come funziona l’indentazione con le condizioni;
- come funzionano gli operatori di confronto;
- come usare
else; - come usare
elif; - come confrontare numeri;
- come confrontare stringhe;
- come funzionano i booleani con le condizioni;
- come combinare condizioni con
and; - come combinare condizioni con
or; - come usare
not; - errori comuni dei principianti;
- come costruire semplici programmi che prendono decisioni.
Alla fine di questa lezione i tuoi programmi potranno fare scelte.
Piccole scelte.
Ma scelte importanti.
Molto Python.
Molto potente.
Leggermente pericoloso.
Perfetto.
Cos’è una condizione?
Una condizione è una domanda a cui Python può rispondere con:
True
oppure:
False
Esempio:
age = 20
print(age >= 18)
Output:
True
Python controlla:
Age è maggiore o uguale a 18?
La risposta è:
True
Altro esempio:
age = 15
print(age >= 18)
Output:
False
La condizione non è vera.
L’utente non ha 18 anni o più.
Python non diventa emotivo.
Controlla solo la condizione.
Niente dramma.
Solo logica.
Più o meno.
Il tuo primo if
Crea un file:
conditions.py
Scrivi:
age = 20
if age >= 18:
print("You are an adult.")
Eseguilo:
python conditions.py
oppure:
python3 conditions.py
Output:
You are an adult.
Questo significa:
Se age è maggiore o uguale a 18, stampa il messaggio.
La condizione è vera.
Quindi Python esegue la riga indentata.
Molto semplice.
Molto importante.
Il programma ha appena preso una decisione.
Piccola decisione.
Grande concetto.
Quando la condizione è falsa
Ora cambia il codice:
age = 15
if age >= 18:
print("You are an adult.")
Eseguilo.
Output:
Non succede nulla.
Perché?
Perché la condizione è falsa.
Python controlla:
15 è maggiore o uguale a 18?
Risposta:
False
Quindi Python salta la riga indentata.
È così che funziona if.
Se la condizione è vera, esegue il codice.
Se la condizione è falsa, salta il codice.
Molto diretto.
Molto Python.
Molto “senza biglietto non si entra”.
L’indentazione conta
In Python, l’indentazione è molto importante.
Questo funziona:
age = 20
if age >= 18:
print("You are an adult.")
La riga:
print("You are an adult.")
è indentata.
Questo significa che appartiene all’if.
Python usa l’indentazione per capire i blocchi di codice.
Un blocco è un gruppo di righe che stanno insieme.
In molti linguaggi si usano {}.
In Python usiamo l’indentazione.
Python ha visto le parentesi graffe e ha detto:
No grazie. Preferisco l’allineamento dei mobili.
Molto Python.
Indentazione sbagliata
Questo è sbagliato:
age = 20
if age >= 18:
print("You are an adult.")
Python mostrerà un errore:
IndentationError
Perché?
Perché dopo if, Python si aspetta un blocco indentato.
Corretto:
age = 20
if age >= 18:
print("You are an adult.")
Usa un’indentazione coerente.
La maggior parte del codice Python usa 4 spazi.
Non mischiare tab e spazi.
Mischiare tab e spazi è il modo in cui piccoli programmi diventano case infestate.
I due punti sono obbligatori
La riga con if ha bisogno dei due punti:
if age >= 18:
I due punti significano:
Qui inizia un blocco di codice.
Sbagliato:
if age >= 18
print("You are an adult.")
Python si lamenterà.
Corretto:
if age >= 18:
print("You are an adult.")
Simbolo piccolo.
Responsabilità enorme.
I due punti sono minuscoli.
Ma senza di loro Python ferma la festa.
Operatori di confronto
Gli operatori di confronto permettono a Python di confrontare valori.
Operatori comuni:
== uguale a
!= diverso da
> maggiore di
< minore di
>= maggiore o uguale a
<= minore o uguale a
Esempi:
age = 20
print(age == 20)
print(age != 18)
print(age > 18)
print(age < 30)
print(age >= 20)
print(age <= 21)
Output:
True
True
True
True
True
True
Questi operatori sono la base delle condizioni.
Fanno domande.
Python risponde con True o False.
Molto utile.
Molto severo.
Come un piccolo giudice con tastiera.
== non è la stessa cosa di =
Molto importante:
=
significa assegnazione.
Salva un valore.
Esempio:
age = 20
Questo significa:
Salva 20 in age.
Ma:
==
significa confronto.
Esempio:
age == 20
Questo significa:
Age è uguale a 20?
Non confonderli.
Idea sbagliata:
if age = 20:
print("Age is 20.")
Corretto:
if age == 20:
print("Age is 20.")
Un = assegna un valore.
Due == fanno una domanda.
Differenza minuscola.
Dramma enorme.
Classica programmazione.
Usare else
else viene eseguito quando la condizione dell’if è falsa.
Esempio:
age = 15
if age >= 18:
print("You are an adult.")
else:
print("You are not an adult yet.")
Output:
You are not an adult yet.
La condizione:
age >= 18
è falsa.
Quindi Python salta il blocco if ed esegue il blocco else.
Questo significa:
Se questo è vero, fai una cosa.
Altrimenti, fai un’altra cosa.
Molto utile.
Molto comune.
Molto “porta A o porta B”.
if ed else con input
Crea un file:
age_check.py
Scrivi:
age = int(input("How old are you? "))
if age >= 18:
print("You can enter.")
else:
print("You cannot enter yet.")
Eseguilo.
Esempio 1:
How old are you? 20
Output:
You can enter.
Esempio 2:
How old are you? 15
Output:
You cannot enter yet.
Ora il tuo programma reagisce in modo diverso in base all’input dell’utente.
Questo è importante.
Lo stesso codice può produrre risultati diversi.
Perché i dati cambiano.
È qui che la programmazione inizia a sembrare viva.
Non troppo viva.
Ancora nessuna ribellione dei robot.
Usare elif
A volte due scelte non bastano.
Potresti avere bisogno di diverse possibilità.
Esempio:
Se il punteggio è 90 o più, voto A.
Se il punteggio è 80 o più, voto B.
Se il punteggio è 70 o più, voto C.
Altrimenti, voto D.
Per questo si usa elif.
elif significa:
else if
Esempio:
score = 85
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: B
Python controlla dall’alto verso il basso.
Prima condizione:
score >= 90
Falsa.
Seconda condizione:
score >= 80
Vera.
Quindi Python stampa:
Grade: B
Poi salta il resto.
Molto efficiente.
Molto deciso.
Molto “ho trovato la risposta, arrivederci”.
L’ordine conta con elif
L’ordine conta.
Guarda questo:
score = 95
if score >= 70:
print("Grade: C or better")
elif score >= 80:
print("Grade: B or better")
elif score >= 90:
print("Grade: A")
Output:
Grade: C or better
Perché?
Perché Python controlla dall’alto verso il basso.
score >= 70 è vero.
Quindi Python esegue quel blocco e salta il resto.
Anche se score >= 90 è vero.
Per questo l’ordine deve essere logico.
Meglio:
score = 95
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: A
Metti prima la condizione più specifica o più forte.
Altrimenti il programma può essere tecnicamente corretto ma logicamente ridicolo.
Python non ti fermerà.
Python permette assurdità se la sintassi è legale.
Libertà molto pericolosa.
Confrontare stringhe
Puoi confrontare anche stringhe.
Esempio:
password = input("Password: ")
if password == "secret":
print("Access granted.")
else:
print("Access denied.")
Esempio 1:
Password: secret
Output:
Access granted.
Esempio 2:
Password: banana
Output:
Access denied.
Python confronta il testo esattamente.
Questo significa:
secret
non è uguale a:
Secret
o:
secret
o:
secret
Spazi e maiuscole contano.
Python è severo.
Come una guardia di sicurezza che ama anche la grammatica.
Case sensitivity con le stringhe
Prova:
word = input("Type yes: ")
if word == "yes":
print("You typed yes.")
else:
print("That was not yes.")
Se l’utente scrive:
yes
Output:
You typed yes.
Se l’utente scrive:
Yes
Output:
That was not yes.
Perché?
Perché "yes" e "Yes" sono stringhe diverse.
Più avanti potrai rendere l’input più flessibile.
Per ora ricorda:
Python confronta le stringhe esattamente.
Esattamente significa esattamente.
Nessuna interpretazione emotiva.
Usare lower()
Puoi rendere più facile il confronto tra stringhe con .lower().
Esempio:
answer = input("Do you like Python? ")
answer = answer.lower()
if answer == "yes":
print("Excellent choice.")
else:
print("Python will try not to be offended.")
Se l’utente scrive:
YES
oppure:
Yes
oppure:
yes
.lower() lo converte in:
yes
Questo rende il confronto più semplice.
Puoi anche scriverlo in modo più corto:
answer = input("Do you like Python? ").lower()
Questo è comune.
Molto utile.
Python perdona le maiuscole dopo che gli dici come farlo.
Booleani nelle condizioni
I booleani funzionano naturalmente con if.
Esempio:
is_logged_in = True
if is_logged_in:
print("Welcome back!")
else:
print("Please log in.")
Output:
Welcome back!
Dato che is_logged_in è già True, non serve scrivere:
if is_logged_in == True:
Funziona, ma è inutile.
Meglio:
if is_logged_in:
Chiaro.
Semplice.
Pythonico.
Molto bello.
Controllare False con not
Puoi usare not per invertire un booleano.
Esempio:
is_logged_in = False
if not is_logged_in:
print("Please log in.")
else:
print("Welcome back!")
Output:
Please log in.
Questo significa:
Se l’utente non ha fatto login, stampa questo messaggio.
not inverte la condizione.
not True
diventa:
False
E:
not False
diventa:
True
Parola piccola.
Grande potere.
Usala con attenzione.
Troppi not possono trasformare il cervello in ginnasta.
Combinare condizioni con and
Usa and quando entrambe le condizioni devono essere vere.
Esempio:
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Output:
You can enter the event.
Entrambe le condizioni sono vere:
age >= 18
e:
has_ticket
Quindi l’accesso è permesso.
Se una delle due è falsa, tutta la condizione è falsa.
and è severo.
Come un buttafuori serio.
Età ok?
Biglietto ok?
Allora entra.
Niente biglietto?
Arrivederci.
Combinare condizioni con or
Usa or quando almeno una condizione deve essere vera.
Esempio:
is_admin = False
is_owner = True
if is_admin or is_owner:
print("You can edit this page.")
else:
print("You cannot edit this page.")
Output:
You can edit this page.
Solo una condizione è vera:
is_owner
Ma basta.
or significa:
Questa o quella o entrambe.
Molto utile.
Molto comune.
Molto “una chiave basta per aprire la porta”.
Combinare input e and
Crea un file:
event_access.py
Scrivi:
age = int(input("Age: "))
has_ticket_answer = input("Do you have a ticket? yes/no: ").lower()
has_ticket = has_ticket_answer == "yes"
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Esempio 1:
Age: 25
Do you have a ticket? yes/no: yes
Output:
You can enter the event.
Esempio 2:
Age: 25
Do you have a ticket? yes/no: no
Output:
You cannot enter the event.
Questa riga è importante:
has_ticket = has_ticket_answer == "yes"
Crea un booleano.
Se la risposta è "yes", allora has_ticket è True.
Altrimenti è False.
Molto utile.
Molto pulito.
Molto Python.
if annidati
Puoi mettere un if dentro un altro if.
Questo si chiama nesting.
Esempio:
age = int(input("Age: "))
if age >= 18:
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if has_ticket == "yes":
print("You can enter.")
else:
print("You need a ticket.")
else:
print("You are too young.")
Funziona.
Ma fai attenzione.
Troppo nesting può rendere il codice difficile da leggere.
Il codice annidato è come scatole dentro scatole dentro scatole.
A un certo punto non sai più dove sono i calzini.
Usa il nesting quando ha senso.
Ma non costruire un labirinto, a meno che tu non ami soffrire.
Il codice piatto è spesso più semplice
Questa versione è più semplice:
age = int(input("Age: "))
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if age >= 18 and has_ticket == "yes":
print("You can enter.")
else:
print("You cannot enter.")
È più corta.
Ma dà un feedback meno specifico.
La versione annidata può dire:
You are too young.
oppure:
You need a ticket.
Quindi entrambi gli approcci possono essere utili.
La scelta migliore dipende dalla situazione.
Programmare spesso non è:
una risposta corretta
È più:
quale soluzione è più chiara per questo problema?
Fastidioso.
Ma vero.
Errore comune: dimenticare i due punti
Sbagliato:
if age >= 18
print("Adult")
Corretto:
if age >= 18:
print("Adult")
I due punti iniziano il blocco.
Niente due punti, niente blocco.
Niente blocco, niente felicità.
Errore comune: indentazione sbagliata
Sbagliato:
age = 20
if age >= 18:
print("Adult")
Corretto:
age = 20
if age >= 18:
print("Adult")
Il codice dentro l’if deve essere indentato.
Python usa l’indentazione per capire la struttura.
I tuoi spazi non sono decorazione.
Sono architettura.
Spazi molto seri.
Errore comune: usare = invece di ==
Sbagliato:
password = input("Password: ")
if password = "secret":
print("Access granted.")
Corretto:
password = input("Password: ")
if password == "secret":
print("Access granted.")
Ricorda:
= assegnazione
== confronto
Uno salva.
Due confrontano.
Una differenza minuscola che può rovinarti il pomeriggio.
Errore comune: confrontare input numerico come testo
Sbagliato:
age = input("Age: ")
if age >= 18:
print("Adult")
Questo fallirà perché age è una stringa.
Corretto:
age = int(input("Age: "))
if age >= 18:
print("Adult")
Se vuoi fare un confronto numerico, converti l’input in numero.
Python non confronta "20" e 18 come fanno gli esseri umani.
Python dice:
Testo e numero? Assolutamente no.
Severo.
Ma ragionevole.
Errore comune: ordine sbagliato degli elif
Sbagliato:
score = 95
if score >= 60:
print("Passed")
elif score >= 90:
print("Excellent")
Output:
Passed
La seconda condizione non viene mai eseguita perché score >= 60 è già vero.
Meglio:
score = 95
if score >= 90:
print("Excellent")
elif score >= 60:
print("Passed")
else:
print("Failed")
Output:
Excellent
Quando usi elif, l’ordine conta.
Pensa prima di ordinare le condizioni.
Il programma non penserà al posto tuo.
Maleducato.
Ma previsto.
Mini programma: controllo numero
Crea un file:
number_checker.py
Scrivi:
number = int(input("Enter a number: "))
if number > 0:
print("The number is positive.")
elif number < 0:
print("The number is negative.")
else:
print("The number is zero.")
Prova:
10
Output:
The number is positive.
Prova:
-5
Output:
The number is negative.
Prova:
0
Output:
The number is zero.
Questo è un esercizio classico sulle condizioni.
Semplice.
Chiaro.
Utile.
Non glamour.
Ma nemmeno un cacciavite è glamour.
E i cacciaviti sono importanti.
Mini programma: controllo password
Crea un file:
password_check.py
Scrivi:
password = input("Enter password: ")
if password == "python123":
print("Access granted.")
else:
print("Access denied.")
Prova la password corretta.
Poi provane una sbagliata.
Questa è una semplice idea di login.
Molto base.
Non usarla per la sicurezza reale.
La sicurezza reale è molto più seria.
Questo è apprendimento.
Non protezione di una banca.
Per favore, non proteggere una banca con la lezione 4.
Mini programma: sconto semplice
Crea un file:
discount.py
Scrivi:
total = float(input("Order total: "))
if total >= 100:
discount = total * 0.10
final_total = total - discount
print(f"Discount: {discount:.2f}")
print(f"Final total: {final_total:.2f}")
else:
print("No discount.")
print(f"Final total: {total:.2f}")
Esempio 1:
Order total: 150
Output:
Discount: 15.00
Final total: 135.00
Esempio 2:
Order total: 50
Output:
No discount.
Final total: 50.00
Questo è vicino alla logica reale di business.
Se l’ordine è abbastanza grande, applica lo sconto.
Altrimenti, niente sconto.
Piccola logica da negozio.
Molto utile.
Molto reale.
Mini programma: calcolatore di voti
Crea un file:
grade_calculator.py
Scrivi:
score = int(input("Score: "))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Grade: {grade}")
Prova diversi punteggi:
95
85
75
65
50
Il programma dovrebbe dare voti diversi.
Questo usa:
- input;
- conversione di tipo;
if;elif;else;- variabili;
- output.
Molti concetti insieme.
La zuppa Python sta diventando più ricca.
Ancora senza gusto USB.
Speriamo.
Pratica
Crea un file:
practice_conditions.py
Scrivi un programma che chiede:
- username;
- età;
- se l’utente è uno studente.
Poi:
- se l’età è sotto 18, stampa
"You are young."; - se l’età è tra 18 e 64, stampa
"You are an adult."; - se l’età è 65 o più, stampa
"You are a senior."; - se l’utente è studente, stampa
"Student mode activated.".
Esempio:
username = input("Username: ")
age = int(input("Age: "))
student_answer = input("Are you a student? yes/no: ").lower()
print(f"Hello, {username}!")
if age < 18:
print("You are young.")
elif age < 65:
print("You are an adult.")
else:
print("You are a senior.")
if student_answer == "yes":
print("Student mode activated.")
Nota questa riga:
elif age < 65:
Non serve scrivere:
age >= 18 and age < 65
Perché?
Perché se Python arriva a questo elif, sa già che:
age < 18
era falso.
Quindi l’età è già 18 o più.
L’ordine aiuta.
Logica bellissima.
Molto Python.
Mini sfida
Crea un file:
shipping_calculator.py
Il programma deve chiedere:
- nome cliente;
- totale ordine;
- paese;
- se il cliente è VIP.
Regole:
Se il totale ordine è 100 o più, la spedizione è gratis.
Se il cliente è VIP, la spedizione è gratis.
Se il paese è "italy", la spedizione è 5.
Altrimenti, la spedizione è 15.
Poi stampa:
Customer: Anna
Order total: 80.00
Shipping: 5.00
Final total: 85.00
Soluzione esempio:
customer_name = input("Customer name: ")
order_total = float(input("Order total: "))
country = input("Country: ").lower()
vip_answer = input("VIP customer? yes/no: ").lower()
is_vip = vip_answer == "yes"
if order_total >= 100 or is_vip:
shipping = 0
elif country == "italy":
shipping = 5
else:
shipping = 15
final_total = order_total + shipping
print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Order total: {order_total:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Final total: {final_total:.2f}")
Testalo con valori diversi.
Prova:
Order total: 120
VIP: no
Prova:
Order total: 50
VIP: yes
Prova:
Country: italy
Order total: 80
VIP: no
Prova:
Country: france
Order total: 80
VIP: no
Il programma dovrebbe scegliere costi di spedizione diversi.
Questa è logica reale.
Piccola.
Ma reale.
Il programma ora prende decisioni.
Molto bene.
Molto Python.
Checklist per principianti
Quando il tuo programma con condizioni non funziona, controlla:
Ho salvato il file?
Ho usato i due punti dopo if, elif ed else?
Il codice dentro la condizione è indentato?
Ho usato == per il confronto?
Ho usato = solo per l’assegnazione?
Ho convertito input in int o float prima del confronto numerico?
Le mie condizioni elif sono nell’ordine corretto?
Ho scritto True e False con la maiuscola?
Ho confrontato le stringhe esattamente?
Ho usato .lower() quando volevo input testuale più flessibile?
La maggior parte dei bug con condizioni non è grande.
Di solito sono piccoli errori logici.
Il computer fa esattamente ciò che hai scritto.
Non ciò che volevi dire.
Questo è fastidioso.
Questo è programmare.
Benvenuto.
Riassunto
Oggi hai imparato:
- le condizioni permettono ai programmi di prendere decisioni;
- le condizioni restituiscono
TrueoFalse; ifesegue codice quando una condizione è vera;elseesegue codice quando la condizione dell’ifè falsa;elifcontrolla un’altra condizione;- Python controlla
ifedelifdall’alto verso il basso; - l’indentazione definisce i blocchi di codice;
- i due punti
:iniziano un blocco; ==confronta valori;=assegna valori;- le stringhe vengono confrontate esattamente;
.lower()aiuta con input testuale flessibile;- i booleani funzionano naturalmente nelle condizioni;
andrichiede che entrambe le condizioni siano vere;orrichiede che almeno una condizione sia vera;notinverte una condizione;- l’ordine conta nelle catene
elif.
Questo è un passo enorme.
I tuoi programmi ora possono scegliere.
Possono reagire.
Possono dire sì o no.
Possono applicare sconti.
Possono controllare password.
Possono calcolare spedizioni.
Possono giudicare numeri.
Un po’.
Non moralmente.
Solo matematicamente.
Bene.
Prossima lezione
Nella prossima lezione impareremo i cicli.
I cicli permettono al programma di ripetere azioni.
Invece di scrivere:
print("Hello")
print("Hello")
print("Hello")
scriverai qualcosa di più intelligente.
Imparerai:
for
while
I cicli sono potenti.
I cicli sono utili.
I cicli sono anche pericolosi se crei per sbaglio un ciclo che non finisce mai.
Ma questa è un’avventura futura.
Per ora, i tuoi programmi possono prendere decisioni.
Progresso molto forte.
Molto Python.