Video Corso Base di Python 3

05: Diagrammi Di Flusso, Logica Booleana e Operatori di Comparazione

Menu della Serie






Benvenuti alla quinta lezione della serie di Tutorial Python sulle Basi del Linguaggio!
In questo episodio introdurremo il concetto di Algoritmo e quello di Diagramma di Flusso, spiegheremo gli Operatori di Comparazione di Python e tratteremo le basi della Logica Booleana.

Nella guida precedente abbiamo scritto il nostro primo programma; chiaramente trattandosi del primo programma della serie, il livello di complessità era piuttosto basso, e l'ordine di esecuzione delle istruzioni piuttosto lineare.
Normalmente dietro la realizzazione di ciascun programma è sempre presente una fetta sostanziosa di logica.

Vengono delinati uno o più algoritmi, che sono, citando la pagina Wikipedia dedicata "procedimenti per risolvere un determinato problema attraverso un numero finito di passi elementari."

Un algoritmo tavolta puó essere molto complesso: in questi casi, per rappresentarne il flusso di esecuzione e controllo da un punto di vista visivo, si utilizzano i Diagrammi di Flusso.
Un programmatore si rivolgerà spesso all'utilizzo dei diagrammi di flusso per poter delineare e visualizzare in maniera logica ed esaustiva cosa il suo programma fa e quale strategia adottare nella fase di scrittura vera e propria.
In sinstesi potete pensare a questi diagrammi come a una sorta di mappa che vi guida alla comprensione logica del vostro problema, e quindi del vostro programma.

Uno degli esempi da manuale che viene spesso insegnato quando si inizia a parlare di Diagrammi di Flusso è l'esempio del giorno di pioggia, ovvero si va a delineare quali possibili azioni razionali si possano prendere qualora fuori stia piovendo e si voglia restare asciutti!
Andiamo ad analizzare questo scenario e proviamo a stilare i passi di un possibile algoritmo:

Sta piovendo?
Se si, sta piovendo, ma disponiamo di un ombrello, possiamo decidere di uscire di casa e affrontare le intemperie;
Se si, sta piovendo, ma non disponiamo di un ombrello, allora sarebbe meglio restare in casa e aspettare che la pioggia passi, magari controllando di tanto in tanto;
Se invece non sta piovendo possiamo uscire tranquillamente.

Per quanto la situazione presa ad esempio sia piuttosto semplice, ci rendiamo conto che analizzarne logicamente tutti questi aspetti a voce potrebbe risultare confusionale, ed è proprio qui che entrano quindi in gioco proprio i diagrammi di flusso.
Le operazioni da compiere sono rappresentate mediante figure geometriche(rettangoli, rombi etc...), e ciascuna di esse ha uno scopo preciso.

Andiamo a dare un'occhiata a un possibile Diagramma di Flusso per l'esempio di cui abbiamo parlato:

Per leggere questo diagramma si parte dal punto di inizio rappresentato da un'ellisse, si seguono le frecce fino a che non si arriva alla fine dello schema, anch'esso rappresentato come ellisse, e si possono prendere strade diverse a seconda del verificarsi o meno di condizioni diverse: queste sono racchiuse all'interno di rombi, mentre le azioni da compiere sono racchiuse in rettangoli.
Mediante questo schema possiamo comprendere a pieno il ragionamento dietro a questo nostro semplice algoritmo, eliminando ogni ombra di confusione.




Tenetevi forte perché la faccenda inizia a farsi davvero interessante... ora che abbiamo spiegato che metodologia utilizzare per pensare da programmatore, possiamo iniziare a pensare di rappresentare questi SI e NO all'interno dei nostri programmi in Python.

E per fare ció parleremo ora di Logica Booleana: l'Algebra di Boole è quel ramo dell'Algebra in cui non si utilizzano numeri ma solamente due valori detti Valori di Verità(proprio ai Vero e Falso che usiamo nei nostri Diagrammi) e che mediante i suoi Operatori permette di effettuare calcoli logici.

Valori Booleani: True e False

Gli altri tipi di dato di cui abbiamo parlato nei video precedenti, Interi, Float e Stringhe, hanno un numero illimitato di possibili valori, purché questi rispettino le caratteristiche del tipo:
Il tipo di dato booleano invece come abbiamo detto, ha solo due valori possibili, e questi sono True e False, in italiano Vero e Falso, che rappresentano sostanzialmente i valori binari 0 ed 1.

True
False

Come per gli altri tipi di valore, anche i valori booleani possono essere assegnati a variabili.
Supponiamo di essere alle prese con la scrittura di un algoritmo che gestisca l'ingresso di automobili all'interno di un garage; per far si che le macchine possano entrare, il cancello dovrà essere aperto.
In questo caso potremmo avere una variabile chiamata cancello, a cui assegnamo il valore True qualora il cancello sia aperto, permettendo così alla macchine di entrare, oppure False in caso contrario:

cancello = True
oppure
cancello = False

type(cancello) 
class 'bool'




True e False sono il metodo utilizzato in Python per delineare Si e No dei diagrammi di flusso; date uno sguardo a questo schema:




Operatori di Comparazione

Ovvero operatori che servono a comparare valori tra di loro, e che ci restituiscono sempre risultati di natura booleana, quindi True o False.

Se affermassi che 5 è uguale a 5, potremo dire che quest'affermazione è Veritiera, quindi True, mentre se affermassi che 5 è uguale a 6, l'affermazione sarebbe Falsa.

Gli operatori di comparazione sono 6:

Un'importante distinzione da fare è quella tra "=" e "==":
Il primo è il simbolo del processo di assegnazione(che utilizziamo cioè per assegnare un valore a una variabile), mentre il secondo è l'operatore di comparazione dell'uguaglianza.

Facciamo alcuni esempi di utilizzo di questi operatori nella Shell Interattiva, in modo da rendere più vivido il concetto e mettere a fuoco le idee:

>>>5 == 5
True
>>>5 == 6
False
>>>23 < 50
True
>>>"ciao" != "arrivederci"
True
>>>X = 18
>>>X >= 16
True
>>>33 = "33"
False

Vi consiglio di esercitarvi qualche tempo sugli operatori di comparazione per prenderci dimestichezza: forniscono un'elasticità logica senza pari.




Operatori Booleani: AND, OR, NOT.

Come nell'Algebra classica abbiamo operatori quali + e -, nell'Algebra Booleana esistono 3 OPERATORI BOOLEANI, e questi sono AND, OR, NOT.

Gli operatori booleani sono utilissimi perché ci consentono di creare espressioni ben più articolate e descrittive di un semplice 5 == 5.
Vengono utilizzati in combinazioni con gli operatori di comparazione appena descritti.
Andiamo ad analizzarne il comportamento tramite quelle che vengono chiamate Tabelle di Verità, che rappresentano tutto le possibili combinazioni di questi operatori e relativi risultati.




Operatore AND:



La logica dietro AND è che affinché un'espressione con questo operatore dia come risultato True, entrambe le comparazioni devono risultare veritiere, in caso contrario otterremo sempre un False.

Tenendo un occhio sulla tabella di verità di and, scriviamo sulla Shell degli esempi concreti utilizzando anche gli Operatori di Comparazione:

>>>2 > 1 and 5 != 7
True
>>>2 == 2 and 1 > 2
False
>>>2 < 1 and "asd" == "asd"
False
>>>23 == 15 and 33 != 33
False




Operatore OR:


Nel caso di OR,, affinché il risultato sia True almeno una delle due comparazioni deve restituire True e chiaramente, tutti i casi risultano veritieri eccetto l'ultimo, in cui entrambi i valori sono falsi.

Facciamo degli esempi sulla Shell Interattiva per fissare il concetto:

>>>25 >= 25 or 23 <= 25
True
>>>"io" == "io" or "io" == "robot"
True
>>>1 != 1 or 1 == 1
True
>>>4 == 5 or 5 == 6
False




Operatore NOT:

Parliamo ora dell'ultimo operatore booleano, il NOT, forse il più semplice da capire.



Se una comparazione risulta non Vera sarà chiaramente Falsa, e viceversa.

>>>not "io" == "robot"
True
>>>not 3 == 3
False




Ricapitolando:
-Abbiamo parlato di Algoritmi, Diagrammi di Flusso, Logica Booleana(con Valori e Operatori Booleani) e Operatori di Comparazione;
-Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi elementari;
-Un diagramma di flusso è una mappa che ci aiuta a comprendere la logica alla base di un programma;
-A differenza degli altri tipi di dato, il tipo di dato booleano ha solo due valori, True e False;
-Esistono 3 Operatori Booleani, AND, OR, NOT, il cui comportamento è illustrato nelle rispettive Tabelle di Verità;
-Gli Operatori di Comparazione ci servono per effettuare comparazioni Booleane(che restituiscono quindi True o False) nelle espressioni.