← Back to course

Condizioni: if, else ed elif

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:

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:

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:

Poi:

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:

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:

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.