Le decisioni con le istruzioni condizionali if e if else

Le decisioni con le istruzioni condizionali if e if else

A volte, nella scrittura di un programma, ci si accorge che se i contenuti delle scatole hanno certi valori si devono fare certe cose, altrimenti se ne debbono fare altre. Vediamo un esempio.
Supponiamo di voler mandare un messaggio gentile a chi usa il nostro programma. Nello scrivere il programma ci accorgiamo che il messaggio è diverso a seconda che il nostro interlocutore sia una femmina oppure un maschio. Allora gli chiediamo se è femmina o maschio e poi scriviamo un messaggio se è una femmina, un messaggio diverso se è un
maschio.

if

L’istruzione che ci permette di scegliere cosa fare si chiama if, che in inglese significa SE.
Questo è il codice del programma che descrive l’esempio appena fatto:

nome = raw_input(“Scrivi il tuo nome “)
utente = raw_input(“Sei femmina? “)
if utente == “si”:
print “Cara “, nome, “, sei bravissima!”
if utente == “no”:
print “Caro “, nome, “, sei bravissimo!”

Vediamo altri esempi concreti per capire bene il significato di “scelta”:
A casa:
SE suonano alla porta vado ad aprire.
In questo caso l’azione di andare ad aprire viene eseguita solo se si
verifica una precisa condizione: SE suonano alla porta.
Una mia azione (andare ad aprire la porta) avviene solo se la condizione (SE suonano) si verifica.
A scuola:
SE domani c’è ginnastica devo portare le scarpe da ginnastica.
SE hai fatto i compiti puoi andare a giocare.
SE i lati e gli angoli di un poligono sono tutti uguali il poligono è regolare.

Esempi:
voto = raw_input (“Che voto hai preso?) “
if voto >= 6 : print “promosso!”

sei promosso se il voto è maggiore o uguale a 6.
Analogamente si potrebbe scrivere il programma, dopo aver definito le variabili relative:
if tuo_peso > 100 : print “grassone!”

sei grassone se pesi più di 100 kg

if scatola == 2 : print “numero pari”

la scritta numero pari viene stampata se il numero indicato è 2.
if x < 0 : print x, “è negativo”

viene stampata la scritta x è negativo se il numero indicato è <0.

L’istruzione if si chiama istruzione condizionale perché pone una certa condizione prima dell’esecuzione dell’istruzione successiva.
Quando il computer incontra l’istruzione if esegue un certo lavoro se è vera la condizione specificata, altrimenti passa all’istruzione successiva del programma.

La frase che segue la if si chiama: condizione.
Quando la condizione è soddisfatta, si esegue l’istruzione che segue i due punti (:), altrimenti non si fa nulla.
Il contenuto della scatola voto è > 0 = a 6? Allora sei promosso!
Notate che i due punti (:) sono obbligatori e che l’istruzione sarà:

struttura esempio
if <condizione> : if voto >= 6:
<istruzione> print “promosso”

L’istruzione deve stare più all’interno della prima riga.
Con un’orribile parola presa in prestito dall’inglese e “italianizzata” si dice che devono essere indentate”. Dopo la “condizione” anziché una sola istruzione, come negli esempi precedenti, possono essere scritte due o più istruzioni come segue:

struttura esempio
if <condizione> : if voto >= 6:
<istruzione1> print “promosso”
<istruzione2> print “mamma contenta”

La prima istruzione che non sta più all’interno (che non è più “indentata”) segnala al computer la fine del blocco di istruzioni che devono essere eseguite se la condizione è soddisfatta.
Non c’è un limite al numero di istruzioni che possono comparire nel corpo di un’istruzione if ma deve sempre essercene almeno una.

Si provi a scrivere questo programma:
if 5 > 10:
    print “sun “
print “moon”
il computer scriverà “moon” perché la linea non fa più parte dell’istruzione if. Ma se la linea print “moon” viene indentata farà parte dell’if e non verrà più stampata.
if 5 > 10:
print “sun”
print “moon”
Questo perché Python deve sapere dove finisce l’istruzione if e l’unico modo per dirglielo è indentare le istruzioni.

Abbiamo visto negli esempi precedenti che, oltre al segno di uguaglianza (==), esistono anche i segni di disuguaglianza e precisamente:

(>) maggiore di
e
(<) minore di

Nella tabella seguente trovi elencati tutti gli operatori che servono all’istruzione if per esaminare il contenuto di una variabile.

Operatore

Funzione

= =

uguale

<

minore di

<=

minore o uguale a

>

maggiore di

>=

maggiore o uguale a

!=

diverso da (primo modo)

< >

diverso da (secondo modo)

Per indicare “uguale a “ si usa due volte il segno = (==).
Questo perché un solo =, come ben sappiamo, significa “metti nella scatola il cui nome è indicato a sinistra il valore indicato a destra” Ad esempio, per assegnare un valore a una variabile si scrive voto = 7.

Vediamo un esempio in cui è un po’ più complicato prendere una decisione perché consideriamo più condizioni insieme. Infatti il lavoro deve essere svolto se sono soddisfatte contemporaneamente diverse condizioni, come nell’esempio seguente:
maggiorenne = raw_input(“hai più di 17 anni’ “)
prigione = raw_input(“Sei già stato in prigione? “
if maggiorenne == “si”:
      if prigione == “no”:
            print “puoi votare”

Operatori logici and or not
Per risolvere il problema precedente dobbiamo introdurre tre nuovi simboli, il cui significato è simile in italiano e in inglese, che si chiamano “operatori logici”:

 

Operatore

Significato

or

“oppure”

and

“e inoltre”

not

“non”

L’ultimo programma che abbiamo scritto usando i nuovi operatori diventa molto semplice:
if maggiorenne == “si” and prigione == “no” :
print “puoi votare”

Vediamo alcuni esempi concreti in cui questi nuovi operatori sono necessari.

and

SE hai fatto i compiti E c’è il sole puoi andare in bicicletta
if compiti == “si” and sole == “si”:
    print “puoi andare in bicicletta”
SE i tre lati di un triangolo sono uguali, il triangolo è equilatero
if lato1 == lato2 and lato1 == lato 3:
    print “triangolo equilatero”
SE un numero è maggiore di 10 E minore di 20 allora è compreso fra 10 e 20.
if num > 10 and num <20:
    print “il numero ”, num,” è compreso fra 10 e 20”

NOTA BENE! Tutte e due le condizioni richieste devono essere soddisfatte, sia quella dopo if che quella dopo and. Il lavoro viene svolto solo in questo caso.

or

SE in un triangolo la lunghezza del lato1 e quella del lato2 sono uguali OPPURE sono uguali le lunghezze del lato1 e quella del lato3 allora il triangolo è isoscele.
if lato1 == lato2 or lato1 == lato3:
    print “triangolo isoscele”

NOTA BENE: con l’operatore or non è necessario che siano soddisfatte contemporaneamente tutte le condizioni in esame, ma è sufficiente che, fra due condizioni, ne sia verificata solo una perché il lavoro sia svolto.

not

SE NON hai compiti da fare puoi andare a giocare.
fatto_compiti = raw_input(“hai fatto i compiti? “)
if not fatto_compiti == “si”:
      print “Fannullone! non puoi andare a giocare”

SE NON è uguale a zero il divisore la divisione è possibile.
dividendo = input (“indica il dividendo”)
divisore = input (“indica il divisore”)
if not divisore == 0 :
      print “il risultato è “, dividendo/divisore

Riprendiamo l’esempio del triangolo isoscele e scriviamo un’altra versione del programma, questa volta con il not.
If lato1 == lato2 and not lato1 == lato3 or lato1 == lato3
                  and not lato1 == lato2 or lato2 == lato3:
    print “Il triangolo è isoscele”

Se indichi tre numeri compresi tra 0 e 90 puoi giocarli al Lotto.
num1 = input(“dimmi un numero “)
num2 = input(“dimmi un altro numero “)
num3 = input(“dimmi un terzo numero “)
if num1 > 0 and num1 <= 90 and num2 > 0 and num2 <= 90 and
num3 > 0 and num3 <= 90 and not num1 == num2 and not num2
                            == num3 and not num1 == num3:
      print “Gioca i tre numeri al Lotto!”

NOTA BENE: l’operatore not richiede che la condizione espressa non sia soddisfatta, perché esso esprime una negazione.

If … else
L’istruzione if può essere anche più complicata, in quanto ci consente di direcosa fare sia quando la condizione è soddisfatta sia quando non è soddisfatta. Spesso ci capita di voler fare una cosa se la condizione è vera e un’altra se la condizione è falsa. Vediamo un semplice esempio:

if x < 3:
       print “x è minore di 3”
else:
       print “x non è minore di 3”

Sono in casa: SE suonano alla porta vado ad aprire ALTRIMENTI continuo a leggere.
Con questa istruzione posso decidere di andare ad aprire se suonano alla porta e di continuare a leggere se non suonano alla porta ed è la risposta alla condizione “suonano alla porta?” che decide quale delle due azioni deve essere fatta.
ring = raw_input(“Suonano alla porta? “)
if ring == “si” :
      print “vai ad aprire”
else:
      print “continua a leggere”

Nell’esempio seguente se voto è >= 6 stampo “promosso”, se voto è < 6 stampo “bocciato”
voto = input(“che voto hai preso? “)
if voto >= 6 :
    print “promosso!”
else:
    print “bocciato!”
Riprendiamo alcuni esempi precedenti e arricchiamoli con l’istruzione else.
fatto_compiti = raw_input(“hai fatto i compiti? “)
if not fatto_compiti == “si”:
       print “Fannullone! non puoi andare a giocare”
else:
       print “Bravo! vai a giocare”

dividendo = input(“indica il dividendo”)
divisore = input(“indica il divisore”)
if not divisore == 0 :
      print “il risultato è “, dividendo/divisore
else:
      print “la divisione per 0 è impossibile”

voto = input(“che voto hai preso? “)
if voto >= 6 :
    print “promosso”
    print “bravo!”
else:
    print “bocciato”
    print “devi studiare di più!”

nome = raw_input(“Come ti chiami? “)
femmina = raw_input (“Sei femmina? “)
if femmina == “si”:
      print “Cara “, nome,
      print ” , sei bravissima!”
else:
      print “Caro “, nome
      print ” , sei bravissimo!”


1) dati due numeri, stabiliamo se il primo è maggiore o minore del secondo.
num1= input(“Introduci il primo numero “)
num2 = input(“Introduci il secondo numero “)
if num1 > num2:
      print num1, ” è maggiore di “, num2
else:
      print num1, ” è minore o uguale a “, num2

2) area del rettangolo
risposta = raw_input(“Vuoi sapere come calcolare l’area del rettangolo? (S/N) “)
if risposta == “S”:
      print “devi moltiplicare la base per l’altezza”
else:
      print “ciao!”

3) scrittori
risposta1 = raw_input(“chi è l’autore dei Promessi Sposi? “)
if risposta1 == “Manzoni”:
      print “la risposta è esatta”
      print “bravo!!”
else:
      print “risposta errata!”
      print “la risposta esatta è: Manzoni”
      print “Studia di più”
risposta2 = raw_input(“chi è l’autore della Divina Commedia? “)
if risposta2 == “Dante”:
     print “la risposta è esatta”
     print “bravo!!”
else:
     print “risposta errata!”
     print “la risposta esatta è: Dante”
     print “Studia di più”

elif
Purtroppo molte volte ci sono più di due possibilità di scelta e quindi dobbiamo trovare ancora un’altra soluzione.
Vediamo un esempio pratico: cosa fa un automobilista che si trova ad un punto in cui la strada si biforca. Pensa: “Se andando a sinistra arrivo a casa, allora vado a sinistra, altrimenti vado a destra”.
Supponiamo che decida di andare a sinistra e che ora si trovi ad un altro incrocio. A questo punto dovrà scegliere non solo la strada giusta ma anche la più breve.
Usando l’istruzione if…else scrivere il programma diventa troppo complicato, Per fortuna Python ci aiuta con:

if…elif…else.

Vediamo alcuni esempi:
x = input(“indica il numero x “)
y = input(“indica il numero y “)
if x < y:
    print x, “è minore di”, y
elif x > y:
    print x, “è maggiore di”, y
else:
    print x, “e”, y, “sono uguali”

nome = raw_input(“qual è il tuo nome? “)
if nome == “Carlo”:
print “il tuo onomastico è il 4 novembre”
elif nome == “Francesca”:
      print “il tuo onomastico è il 9 marzo”
elif nome == “Anna”:
      print “il tuo onomastico è il 26 luglio”
elif nome == “Andrea”:
      print “il tuo onomastico è il 30 novembre”
elif nome == “Stefano”
      print “il tuo onomastico è il 26 dicembre”
else:
     print “non so quando è il tuo onomastico ma spero che ogni giorno sia la tua festa!”

elif è l’abbreviazione di “else if”, che in inglese significa “altrimenti se”.
In modo formale questa istruzione viene definita: condizioni in serie.

Non c’è alcun limite al numero di istruzioni elif.
È possibile inserire un’unica istruzione else che deve essere l’ultima dell’elenco e che rappresenta l’azione da eseguire quando nessuna delle condizioni precedenti è stata soddisfatta.

Non è obbligatorio inserire l’istruzione else.

Se nessuna delle precedenti condizioni è vera ed è presente un else verrà eseguito il codice dopo else; se else non è presente non verrà eseguito niente.

Un altro esempio è provare ad indovinare il numero indicato.

numero = 78
indovina = 0
print “indovina il numero”
indovina = input(“indovina il numero: “)
if indovina > numero:
    print “troppo alto”
elif
    indovina < numero
    print “troppo basso”
else
    print “Giusto!!”

Ora vediamo un esempio senza else finale.

print “stampa se un numero é pari o dispari”
numero = input(“scrivi un numero: “)
if numero %2 == 0:
      print numero, ” è pari”
elif numero %2 == 1:
      print numero, ” è dispari”

(se non è pari e non è dispari è un numero un po’ strano e allora non facciamo nulla)

Commento all'articolo