Video Corso Base di Python 3

06: Controllo di Flusso: if, elif ed else!

Menu della Serie






Ciao a tutti ragazzi e ragazze e benvenuti a questa nuova lezione della serie di tutorial Python dedicati alle basi!
Continueremo il discorso sulla gestione del flusso, parlando di tre istruzioni di controllo molto importanti: if, elif ed else.

Per ricollegarci bene al discorso direi di ripartire dal diagramma di flusso analizzato nella lezione precedente:


Come ricorderete si tratta di uno schema che illustra le possibili azione razionali che una persona puó prendere in caso di pioggia, qualora il suo scopo sia restare asciutto.
Abbiamo imparato che i Si e No del diagramma sono rappresentati dai due unici valori del tipo di dato booleano, ovvero True e False.

In questa puntata andremo a fondo col concetto focalizzandoci su come sia possibile strutturare i diversi blocchi di controllo delle condizioni;
Se fin'ora avete pensato ai diagrammi di flusso come a delle mappe del vostro programma, magari potete immaginare ció che spiegheremo ora come delle specie di incroci stradali su queste mappe.

La prima istruzione di controllo che analizzeremo è l'istruzione IF:

età = 24 
if età >= 18:
print('Sei maggiorenne')

Eseguiamo il programma andando su RUN/RUN MODULE oppure cliccando direttamente il tasto F5
'Sei Maggiorenne'

Analizziamo da vicino i dettagli del funzionamento di questo programma, tramite la lettura del suo diagramma di flusso:



In Italiano, IF si traduce con SE.

Se la condizione "età >= 18" risulta veritiera, quindi SE il risultato di questa espressione restituisce valore booleano True, il programma esegue questa porzione di codice e restituisce la stringa "Sei Maggiorenne".
Se invece la condizione fosse risultata falsa, quindi se età avesse avuto un valore numerico inferiore a 18, il programma sarebbe saltato direttamente alla fine del programma, ignorando questa porzione di codice.

Verifichiamo questa possibilità andando ad alterare la variabile età, assegnandole ora il valore 16:

età = 16 
if età >= 18:
print('Sei maggiorenne')

run/run module:

Il programma ignora la porzione di codice col print('Sei maggiorenne') saltando direttamente alla fine(e quindi senza restituirci nulla in output!), ripetiamolo, perché la condizione di controllo età >= 18 ha restituito valore booleano False.




In Python, i blocchi di codice vengono delineati tramite quella che in programmazione chiamiamo indentazione, ovvero l'aggiunta di spazi(4/8/12e/ecc spazi bianchi o 1/2/3/ecc TAB) come delimitatore della nuova porzione di codice.
Badate bene che a differenza di altri linguaggi di programmazione, l'indentazione in Python è obbligatoria, e non rispettarla comporta la comparsa di errori.

Modifichiamo il codice precedente togliendo lo spazio davanti al print():

età = 16 
if età >= 18:
print('Sei maggiorenne')

Provate ad eseguire; come noterete Python si rifiuta di eseguire il codice perché non correttamente indentato, perché non rispetta cioè i suoi standard di logica.




Apriamo ora una piccola parentesi per quanto riguarda gli errori: evitate assolutamente di farvi scoraggiare dalla comparsa di errori!
Sopratutto nella prima fase di apprendimento è normalissimo ricevere tonnellate di messaggi di errore da Python, e questo a differenza di ció che qualcuno puó pensare è un bene.
Sbagliare è utile, perché significa infatti che state imparando qualcosa!
Tutti sbagliano, e i migliori fanno tesoro di ciascun errore la vita gli ponga davanti per imparare.
Come tutti i programmatori, se la shell vi restituisce un messaggio che non riuscite a capire, semplicemente copiatelo e datelo in pasto a Google, che si dimostrerà anche in questo caso un preziosissimo alleato, garantito.




Come fare ad eseguire del codice selezionato qualora la condizione di controllo restituisca invece False?

Per questo scopo ci viene in aiuto l'istruzione Else, traducibile in Italiano con "Altrimenti" o "Diversamente".


Come vedete ora, se l'espressione restituisce un valore booleano False, viene eseguito un altro blocco di codice prima che il programma finisca.
Il blocco else è sempre l'ultimo ad essere analizzato e eseguito solo se tutte le condizioni precedenti ad else sono risultate false.
Modifichiamo il nostro codice in maniera appropriata:

età = 16 
if età >= 18:
print('Sei maggiorenne')
else:
print('Sei minorenne')

Eseguiamo:

'Sei minorenne')

...e come vedete, ora ci viene restituita la stringa "Sei minorenne" prima che il programma finisca!





Fino a qui tutto bene, giusto?
Ci saranno dei momenti in cui i vostri programmi dovranno essere pronti a poter fronteggiare più di due possibili strade... come un incrocio stradale un pó più complesso.

Per fare questo entra in gioco l'ELIF, che significa "Else IF", ovvero "altrimenti se..." che come per magia vi permette di aggiungere tanti possibili blocchi di controllo quanti ne avete bisogno.
L'istruzione elif viene eseguita solo se la sua espressione di controllo restituisce True e l'if o eventuali elif precedenti hanno restituito False.

Ad esempio, rendiamo un pó più complesso il nostro programma, aggiungendo una variabile patente e l'operatore booleano and:

età = 18
patente = False

if età >= 18 and patente == True:
print('Puoi noleggiare una Ferrari!')
elif età >= 18 and patente == False:
print('Niente patente, niente Ferrari!')
else:
print('Ritorneremo a parlare di macchinoni tra qualche anno...')


In accordo con questo esempio, il diagramma di flusso potrebbe essere simile a questo:




Ricapitolando:

-IF, ELIF ed ELSE sono forse le 3 istruzioni di controllo del flusso più importanti in Python;
-L'Indentazione, ovvero l'aggiunta di spazio bianco all'inizio, è il metodo utilizzato in Python per separare i vari blocchi di codice;
-L'Indentazione in Python è obbligatoria e non rispettarne le regole comporta la comparsa di errori;
-IF è l'istruzione che ci consente di eseguire un blocco di codice associato SE l'espressione di controllo analizzata restituisce valore booleano True;
-ELIF significa "else if" ed è l'istruzione che ci consente di definire tanti blocchi di controllo quanti ne abbiamo bisogno: il codice associato a ciascun ELIF viene eseguito se gli IF o ELIF precedenti restituiscono False mentre lui restituisce True;
-ELSE(altrimenti, diversamente) è l'ultima istruzione ad essere analizzata e viene eseguita se tutte le espressioni condizionali precedenti sono risultate False;