Ciao a tutti ragazzi dal vostro carissimo
Pitone Programmatore. Benvenuti sul mio canale, dove vi insegno i linguaggi di programmazione
in modo pratico, veloce e divertente.
Sono felice di presentarvi oggi questo favoloso
corso completo: Python per Principianti. Se non hai mai scritto del codice di programmazione
prima d’ora, e vuoi imparare a programmare partendo da zero, questo video è perfetto per te.
Oppure, se hai già un po’ d’esperienza e desideri un corso che illustri in modo chiaro tutti gli
argomenti fondamentali del linguaggio Python, e che puoi riconsultare ogni qualvolta necessiti
di informazioni su un dato argomento, questo è il video giusto. Il python è il mio linguaggio
preferito in assoluto! E’ estremamente semplice, perciò è il miglior linguaggio da imparare per
chi non ha mai programmato e inizia da zero. Allo stesso tempo, è un linguaggio potentissimo, che
permette di creare app per smartphone, software di intelligenza artificiale e machine learning,
videogames, siti internet e tanto altro. Non a caso è uno dei linguaggi più popolari del momento,
ed è usatissimo da aziende come Google, Instagram, Uber, Netflix, Spotify e tante altre...perciò se
cerchi un lavoro, è il linguaggio giusto per te.
In questo video impareremo insieme tutti gli
elementi fondamentali del Python e li useremo per realizzare, passo passo, una bellissima app.
La app consisterà in un assistente virtuale, che accoglierà i clienti un un nostro ipotetico
bar immaginario, proponendogli delle freschissime bevande. Al termine di questo video sarai
capace di leggere e comprendere un codice di programmazione come questo e di scriverlo con
le tue mani per creare delle fantastiche app dagli usi più disparati. Durante il corso ti assegnerò
anche un piccolo esercizio da risolvere, per mettere alla prova le nozioni che avrai appreso.
Bene, è ora di iniziare insieme questa bella esperienza di apprendimento del Python.
Non importa se sei grande o piccino, potrai scrivere il tuo primo programma Python in pochi
secondi, letteralmente! Ora partiamo subito e, mentre scorre la sigla, clicca il tasto Iscriviti,
attivando anche la campanella, per non perderti i miei prossimi video, didattici e divertenti,
sul meraviglioso mondo della programmazione.
Bene, prima di iniziare a programmare in
Python, dobbiamo scaricarlo ed installarlo sul nostro pc. Se hai già Python installato,
salta questa parte, andando direttamente al capitolo successivo. Trovi l’elenco dei capitoli
quì sotto il video, nel box di descrizione.
Benissimo, per scaricare Python
andiamo sul sito python.org/downloads, trovi il link sempre in descrizione.
Clicchiamo qui, su questo bel pulsantone giallo: Download Python. Non preoccuparti se vedi
un codice di versione leggermente diverso, perché Python è in continuo aggiornamento.
Terminato lo scaricamento, avviamo il file di installazione, che troverai nella cartella
dei download o direttamente qui sul browser.
Assicurati di mettere una spunta su
questa casella, e premi install now.
Al termine dell’installazione apriamo l’ambiente
di sviluppo di Python, che si chiama IDLE: Integrated Development and Learning Environment.
Premiamo il tasto Windows sulla tastiera e scriviamo IDLE. Eccolo qui, apriamolo.
Ottimo, questa è la cosiddetta shell di python. E’ qui nella shell che vedremo il
nostro programma in azione. Prima però il nostro programma dobbiamo scriverlo. Andiamo
su File e scegliamo New File. E’ in questa finestra che scriveremo le righe di codice
di cui si comporrà il nostro programma. Per lavorare meglio possiamo modificare
esteticamente la finestra. Io vado su Option, Configure Idle e aumento la dimensione
del testo. Premo Apply, ecco, molto meglio. E per stancare meno gli occhi, vado su
Highlights, e scelgo il tema scuro. Premo Apply, beeenissimo, ora sono proprio a mio agio.
Ottimo, siamo pronti a dare vita al nostro primo programma! In questa finestra possiamo scrivere
i comandi che il programma deve eseguire.
Come abbiamo detto a inizio video, realizzeremo
insieme un app per il nostro pub immaginario, che chiameremo...Pub Drink&Codice! Si, mi
piace. L’app consisterà in un simpatico barista virtuale che accoglierà i clienti e gli proporrà
degli ottimi drink. Immagino già uno schermo, all’ingresso del pub, dove i clienti useranno
l’app per ordinare un bel Mojito o una Limonata! Beh, che aspettiamo, iniziamo subito!
La prima cosa che la nostra app deve fare, è stampare un bel messaggio di
benvenuto per il cliente, no?
Ma come si fa a stampare un messaggio a schermo?
E’ molto semplice, si usa una funzione chiamata print, che in inglese significa stampare. Guarda,
l’ambiente di sviluppo ha riconosciuto la funzione e l’ha colorata in viola! Le funzioni sono
rappresentate in viola e sono sempre seguite da parentesi tonde. All’interno delle parentesi tonde
inseriamo ciò che vogliamo stampare a schermo. Vogliamo stampare un testo di benvenuto, ad
esempio: Benvenuto al pub Drink&Codici. Il testo, nel mondo della programmazione, si chiama
stringa, e va inserito tra apici, singoli o doppi! Ecco che l’ambiente di sviluppo riconosce
che è una stringa di testo e lo colora in verde, il mio colore preferito! Bene, ora abbiamo
una funzione print che stamperà una stringa.
Ma come avviamo la nostra
app per vedere se funziona?
E’ molto semplice, premiamo il tasto F5 sulla
tastiera oppure andiamo quassù su Run e premiamo Run Module. Ci verrà richiesto di salvare il file.
Io lo salvo sul Desktop col nome baristaVirtuale. Salviamo e….funziona! L’app è stata eseguita e
ha stampato a schermo il messaggio di benvenuto! Forse starai pensando che questa interfaccia non
è molto carina esteticamente, e che un cliente che utilizzasse questa nostra app non apprezzerebbe
particolarmente la grafica. Ma non preoccuparti, con Python è possibile creare delle bellissime
interfacce grafiche e persino videogiochi. Sul mio canale ho pubblicato alcuni video su questi
argomenti, ma sono di livello un tantino più avanzato. Perciò per ora, continuiamo ad
apprendere per bene i concetti di base.
Ora, sotto questo messaggio, vorrei stampare
degli altri messaggi, in cui il nostro barman virtuale si presenta e accoglie il cliente.
Ma come stampiamo degli altri messaggi, uno dopo l’altro?
Facilissimo! Torniamo al file baristaVirtuale e aggiungiamo una nuova funzione
print, con una nuova stringa: Mi chiamo EdoBot! E in un’altra print...e sono pronto a servirti!
Con una bella faccina. Vi piace il nome che ho inventato per il nostro barista virtuale? Se
no, modificatelo a piacere. Le istruzioni, nei linguaggi di programmazione, vengono
eseguite in ordine, dall’alto verso il basso, quindi queste tre stringhe verranno stampate una
dopo l’altra. Avviamo nuovamente il programma, premendo F5. Se ti richiede di salvare, accetta.
E….voilà! I messaggi vengono stampati uno dopo l’altro! Immagino già l’espressione sul viso dei
nostri clienti quando verranno accolti da EdoBot!
Ora che il cliente è accolto nel pub, veniamo
al sodo! Vogliamo presentare al cliente i drink disponibili nella nostra cantina e il loro prezzo.
Nella realtà, avremo una vera e propria cantina, con varie scatole dove sono conservati drink e
altri prodotti utili. Nell’app dovremo quindi ricreare una cantina virtuale: invece di vere
scatole vi saranno delle scatole virtuali, ovvero delle aree di memoria dove conservare i
drink disponibili, i prezzi e altri dati utili.
Ma come si creano delle aree di
memoria per conservare dati utili?
Si creano con le variabili! Le variabili sono
un elemento fondamentale della programmazione, che vi spiego subito. Per spiegarvele, apro un
attimo un nuovo File, andando su File e New File e lo salvo subito con File e Save As, chiamandolo
spiegazioni. In questo file vi spiegherò le nozioni di programmazione. Una volta spiegate,
le applicheremo alla nostra app baristaVirtuale.
Bene, immaginiamo di avere nella cantina
del nostro pub, un drink speciale amatissimo dai clienti, che si chiama “VodkaBot”. Voglio
inserirlo nella memoria del nostro programma. Allora creo una variabile che si chiama
drink_speciale e il suo valore è uguale a “DigitalVodka”. Ecco fatto! Semplice, no? Ho
creato un’area di memoria chiamata drink_speciale, che contiene una stringa, DigitalVodka.
Immagina proprio una scatola con un’etichetta, drink_speciale, che contiene un testo,
DigitalVodka. Se eseguiamo questo programma con F5. Non viene stampato nessun messaggio a
schermo. Beh, dopotutto non abbiamo inserito nessuna funzione print, ed è solo la print che
può stampare messaggi a schermo. Ma anche se a schermo non vediamo nulla, il comando è stato
eseguito e la variabile è stata creata. Te lo dimostro subito! Qui sulla Shell posso vedere le
variabili memorizzate. Basta scrivere il nome, drink_speciale, premo invio... bam ecco il
valore, DigitalVodka! Ma posso anche stampare la variabile con una semplice print. Torno al
file, scrivo print e all’interno inserisco il nome della variabile. Il programma leggerà il valore
della variabile, che è la stringa DigitalVodka, e inserirà tale stringa all’interno della print.
E’ come se la variabile fosse un pacchetto e la stringa fosse il regalo all’interno. Il
programma spacchetterà questa variabile, rivelando la stringa all’interno. Avvio con F5.
Ecco qua, DigitalVodka! Attenzione! Torniamo al file...il nome della variabile non va scritto
fra apici, così. Perché così facendo non staremmo stampando la variabile drink_speciale. Staremmo
stampando una stringa di testo, con scritto drink_speciale, che non ha nulla a che fare con
la variabile. Avviamo il programma. Ecco, vedi?
Quindi, attenzione. Le stringhe vanno
fra apici e sono di colore verde. Le variabili sono di colore bianco e non hanno
apici, ecco eliminiamole. Memorizzare una stringa dentro una variabile va benissimo,
è proprio quello che abbiamo fatto qui.
Possiamo anche modificare il valore di una
variabile. Se abbiamo inventato una nuova ricetta per il nostro drink speciale, e invece della Vodka
usiamo il Whiskey riscriviamo drink_speciale ma stavolta lo chiamiamo “TechnoWhiskey”. Stampiamo
nuovamente la variabile a schermo. E prima di avviare il programma ricorda: il codice viene
eseguito dall’alto verso il basso. Quindi prima viene creata la variabile e assegnatagli la
stringa DigitalVodka. Poi viene stampata a schermo. Poi alla variabile viene assegnato un
nuovo valore, TechnoWhiskey, sovrascrivendo quello precedente. Infine viene ristampata a schermo.
Queste due print sono proprio ciò che vedremo a schermo, infatti se avvio il programma...ecco
qua! DigitalVodka poi TechnoWhiskey.
Attenzione: le variabili esistono e mantengono i
valori assegnati, solo durante l’esecuzione del programma. Quando il programma viene terminato
o viene riavviato le variabili spariscono, e i dati salvati in esse vengono persi.
Ottimo, torniamo al codice. Ricapitolando, per creare una variabile dove conservare dei
dati utili, scrivo il nome della variabile, metto il segno uguale e inserisco il dato
desiderato, in questo caso una stringa. Non devo per forza inserire una stringa, esistono
infatti altri tipi di dati, che posso assegnare a una variabile. Un numero ad esempio, vi faccio
vedere. Cancelliamo un attimo. E supponiamo che, in cantina, abbiamo una grande scorta di drink
speciali, ad esempio 28 porzioni. Creo una nuova variabile chiamata quantità_drink_speciale e le
assegno il numero 28. Stampiamo la variabile con una bella print. Avviamo il programma. Ecco qua,
28! Come vedete i numeri non vanno racchiusi fra apici. Se inserisco gli apici, così, questo non
sarà più un dato di tipo numerico, ma una stringa, e vedremo più avanti i problemi che potrebbero
insorgere. Togliamo gli apici. Benissimo, questo in particolare è un dato di tipo int, cioè un
numero intero. Ma posso inserire anche numeri con la virgola, ovvero di tipo float. Mi può servire
un numero con la virgola per memorizzare il prezzo di un drink. Cancelliamo. Scriviamo prezzo_drink
uguale 5 euro e 50 centesimi. Stampiamo, avviamo, e voilà! Oltre le variabili di tipo stringa,
intero e float esiste anche il booleano. Cancelliamo. Il booleano può avere due valori:
True o False, cioè Vero o Falso. Ad esempio, creo una variabile che mi dice se il pub è aperto
al pubblico. Scrivo pub_aperto, uguale, True, Vero se il pub è aperto. Oppure scrivo False se
il pub non è aperto, magari è chiuso per ferie o per fallimento…speriamo di no! Stampiamo con
una print, avviamo con F5, ecco fatto, Falso!
Ottimo!! Ora che abbiamo imparato ad usare le
variabili per conservare dei dati utili, usiamole subito nella nostra app! Cancelliamo tutto
qui, ok, e torniamo al file baristaVirtuale.
Le variabili, solitamente, si dichiarano
all’inizio del programma. Inseriamo il drink speciale da proporre al cliente: drink_speciale
= DigitalVodka. E il suo prezzo: prezzo_drink = 5 euro e 50. Abbiamo imparato anche come stampare
a schermo le variabili! Procediamo subito! Dopo che EdoBot si presenta, vogliamo che dica: "Il
drink più cool del nostro pub è:" e subito dopo scriviamo print drink_speciale. Avviamo la nostra
app e vediamo che succede. Fanstastico! Dopo le solite presentazioni viene stampato a schermo
“Il drink più cool del nostro pub è DigitalVodka! Torniamo al codice e presentiamo anche il prezzo.
print, Provalo subito al modico prezzo di. Print prezzo drink. Avviamo nuovamente! Ecco quà! Il
nostro barman virtuale sta facendo davvero un ottimo lavoro parlando coi clienti! Ora però,
i clienti devono anche potergli rispondere! Per scegliere quali drink acquistare o inserire i
propri dati come nome, cognome, data di nascita.
Fin’ora il cliente può solo
leggere i messaggi a schermo.
Ma come può scrivere, per inserire dati,
informazioni e compiere delle scelte?
Ve lo spiego subito, torniamo
al file spiegazioni.
Hai imparato bene che il programma può inviare
un’output, leggibile a schermo, usando la funzione print. Se scrivo print Giacomino...e
avvio il programma. Ecco quà leggo a schermo Giacomino. Ma se io volessi inviare un input
al programma, ad esempio scrivere il mio nome, invece che una print, che cancelliamo, scrivo una
input, semplicissimo. Non è nemmeno necessario inserire roba fra parentesi tonde. Se ora avvio il
programma! Magia! Compare un cursore lampeggiante e posso scrivere parole, numeri, caratteri
speciali, qualsiasi valore desideri. La funzione input funziona in modo uguale e opposto alla
print. La print prende una stringa dal programma e la da allo schermo. La input prende una stringa
dallo schermo, e la da al programma. Per inviare questa bella stringa al programma premo invio.
Ora però il programma finisce, perché….torniamo al codice….la input è sola soletta. E il valore
stringa che prende dallo schermo viene perso, perché non viene salvato da nessuna parte.
Ma….abbiamo imparato come salvare dei valori nel programma, no? Certamente, con le variabili.
Allora, andiamo qui e scriviamo stringa_inserita, uguale, funzione input. In questo modo,
la stringa inserita a schermo dal cliente, uscirà fuori dalla input() e verrà subito
salvata in una variabile, così non verrà persa e potremo riutilizzarla. In linguaggio
informatico si dice che una funzione ritorna un valore. Ad esempio la funzione input ritorna
una stringa, scritta a schermo dal cliente.
Ora che abbiamo salvato la stringa inserita in
una variabile, stampiamola a schermo per vedere se è corretta! Come al solito scrivo print e il
nome della variabile di cui voglio leggere il valore. Avviamo per vedere se funziona? Via!
Ecco che appare l’indicatore e posso scrivere qualcosa. Ora premo invio! Perfetto la stringa
viene salvata correttamente e poi mostrata a schermo, è proprio quello che ho scritto!
Fantastico, con queste conoscenze possiamo già dialogare col cliente nella nostra
app, fare delle domande e ottenere delle risposte. Puliamo tutto qui, ecco, che l’igiene è
importante, e torniamo all’app baristaVirtuale.
Dopo la piccola pubblicità del drink consigliato
dalla casa, chiediamo al cliente….”come ti chiami”? Creiamo una variabile nome_cliente, dove
conservare il nome scritto a schermo dal cliente, che verrà ritornato dalla input. E ora creiamo
un messaggio personalizzato per il cliente! Scriviamo “Benvenuto carissimo” e stampiamo il
nome del cliente! Prima di avviare il programma, chiediamogli anche la data di nascita! Ci serve
saperla perché nel nostro pub vendiamo anche drink alcolici, e non vogliamo incorrere in sanzioni
per vendita a minorenni! Facciamo esattamente la stessa cosa. Scrivo una domanda: In che anno sei
nato?. Salvo nella variabile anno_nascita l’anno che verrà inserito dal cliente e poi gli rispondo:
“Sei nato nel”. print anno_nascita. Sembra tutto in regola, proviamo se funziona, via!
Fantastico! Dopo le stampe viste precedentemente, il nostro bravo barman chiede chiede: Come ti
chiami? Posso scrivere! Giacomino. Benvenuto carissimo Giacomino, perfetto! E ora...in
che anno sei nato? 2010. Sei nato nel 2010, ottimo! Ora dobbiamo calcolare l’età del cliente
perché attenzione: se un cliente è nato nel 2010, e siamo nel 2021, significa che il cliente ha 11
anni! E da normativa vigente non possiamo vendere alcolici a un minorenne, soltanto anacolici.
Ma come possiamo fare dei calcoli matematici nel programma? Non solo per calcolare l’età
di un cliente, anche per tener conto dei drink acquistati e venduti, per applicare
sconti fedeltà etc. Spostiamoci nel file di spiegazione e ve lo spiego subito.
Immaginiamo di avere nel nostro pub, 5 drink diversi, fra i quali il cliente
può scegliere. Sono pochi? Beh dai, abbiamo appena aperto il pub! Più avanti i clienti
avranno più scelta, ma per ora i drink disponibili sono 5. Scriviamolo: drink_disponibili = 5.
Supponiamo che 3 di essi siano alcolici e 2 analcolici. Allora, invece di un numero,
possiamo scrivere un’operazione matematica: 3+2. Stampiamo la variabile, ecco, e avviamo! Bene
l’operazione 3+2 ritorna un numero intero, cinque, che viene salvato nella variabile e poi stampato.
Il più, è chiamato operatore, per la precisione operatore binario, perché fa un calcolo fra due
numeri. Esistono tanti altri operatori binari, i principali sono il più, il meno, il per e
il diviso. Oltre che fare calcoli con numeri, possiamo fare calcoli con variabili che contengono
numeri. Cancelliamo e vediamo un esempio. Abbiamo detto che i drink alcolici sono tre, ecco. E
che i drink analcolici sono 2. Allora i drink disponibili sono pari alla somma degli alcolici
più gli analcolici. Così stiamo sommando i valori contenuti nelle due variabili. Se stampiamo il
risultato e avviamo...benissimo, da sempre 5, il calcolo è corretto! Oltre gli operatori binari
abbiamo anche gli operatori unari, sono molto utili ti faccio vedere. Cancelliamo. Dichiaro la
variabile drink_disponibili pari a 5. E la stampo. Ora immaginiamo di aver inventato due nuovi
freschissimi drink. Scrivo drink_disponibili += 2, per aumentare di due il valore della variabile.
Se stampiamo...e avviamo…. Perfetto, i drink disponibili sono ora 7. Esistono tanti altri
operatori unari, i principali sono la somma, la sottrazione, la moltiplicazione e la
divisione. Oltre che coi numeri interi, int, possiamo fare operazioni anche coi numeri
con la virgola, float. Cancelliamo e scriviamo il prezzo di un drink: prezzo_drink = quattro
euro e 25 centesimi. I clienti più fedeli possono accedere a uno sconto_fedeltà, pari a un euro
e cinquanta. Allora il prezzo_scontato è pari a prezzo_drink meno sconto_fedeltà. Stampiamo
prezzo scontato...avviamo...ecco qua! I clienti più simpatici, pagano solo 2 euro e 75.
Bada che, le operazioni possiamo anche inserirle direttamente dentro le print
o altre funzioni. Invece di definire la variabile prezzo scontato e scrivere questa
print...cancelliamole...possiamo più rapidamente scrivere print prezzo_drink - sconto_fedeltà.
Avviamo il programma e il risultato è lo stesso! Perché calcola al volo il risultato della
sottrazione e lo stampa a schermo. In questo modo il codice è più breve, ma il risultato di
questa sottrazione non viene conservato su nessuna variabile, quindi una volta stampato a schermo
viene perso. Se vogliamo riutilizzarlo in futuro, senza dover rifare la sottrazione ogni
volta, è meglio salvarlo su una variabile.
Bene cancelliamo e proseguiamo. Ricordi
le variabili di tipo booleano, ad esempio pub_aperto uguale True? Esistono operatori anche
per i booleani e si chiamano operatori logici, ma ne parleremo più tardi quando studieremo
la logica booleana. Cancelliamo.
Infine, esiste un operatore anche per le
stringhe! Vi faccio vedere, creiamo una variabile di tipo stringa: nome_barman uguale “EdoBot”.
Stampiamo...avviamo...benissimo, EdoBot. Ora, questo simpatico nome è formato da Edo più Bot.
Possiamo proprio scrivere così: stringa Edo, più, stringa Bot, ecco fatto. Se avviamo, il risultato
sarà lo stesso! Bene, questo più fra due stringhe si chiama operatore di concatenazione, e come hai
appena visto produce una stringa risultato che è data dall’unione delle due stringhe originarie.
Anche l’operatore concatenazione, come gli operatori visti precedentemente, può essere
inserito direttamente all’interno di una print, per stampare messaggi formati da più stringhe.
Posso ad esempio scrivere: Ciao, mi chiamo, più, EdoBot. Avviamo, ecco qua! Oppure, dato
che la stringa EdoBot è già contenuta nella variabile nome_barman sarebbe ancora meglio
scrivere, ciao mi chiamo più, nome_barman. Avviamo e voilà il risultato è il medesimo!
Torniamo al codice e...attenzione! L’operatore di concatenazione è rappresentato
con un più, ma, come avrete intuito, funziona in modo totalmente diverso dall’operatore
somma visto prima! L’operatore di concatenazione unisce due stringhe, invece l’operatore somma
fa un addizione matematica fra due numeri, siano essi di tipo int o float. Non fate
confusione fra i due operatori, anche se entrambi sono rappresentati con un più. Vi faccio vedere
un errore molto comune, cancelliamo un po’.
Creo una variabile di tipo int, quindi
un numero intero. Ora ne creo un’altra di tipo stringa. Non farti ingannare dal fatto
che nella stringa vi sia scritto un due. Il programma non lo vede come un numero intero,
ma come una scritta, una stringa di testo, perché è racchiuso fra apici. Infatti l’ambiente
di sviluppo lo colora in verde. Mentre i numeri, interi o float, sono colorati in bianco.
Ora...non senti una voglia malsana e irrefrenabile di sommare un numero con una stringa
per vedere cosa succede? Te lo dico io cosa succede...l’apocalisse! . No
dai, niente di così grave. Quello che avviene si chiama eccezione proviamoci
insieme per scoprire di cosa si tratta.
Provo a scrivere c uguale “a più b”. Pronti
all’esplosione? Avviamo il programma. . Ecco qua la scritta che vediamo in rosso è un’eccezione.
In pratica, è avvenuto un errore nel programma. Ci viene messa in evidenza la riga di codice che ha
generato l’errore, come ci aspettavamo è proprio lei: c uguale a più b. L’errore è classificato
come TypeError, errore di tipo, e viene riportata anche una breve descrizione: i tipi degli operandi
non sono supportati per il simbolo più. Perché stiamo provando a sommare un int, la variabile a,
con una stringa, la variabile b. E’ come sommare un numero con una parola, non ha senso! Quello che
possiamo fare però, è convertire la stringa in un numero intero, torniamo al codice. Guardate
cosa faccio. Racchiudo la variabile stringa all’interno della funzione int. La funzione
int sono capaci di convertire in numeri interi, le variabili di tipo stringa compatibili. La
funzione int, quindi, prenderà il due di tipo stringa e ritornerà un due di tipo int, che sarà
immediatamente sommato, senza errori, con l’altra variabile int. Se stampiamo c...e avviamo.
Meraviglioso, niente eccezioni e il risultato è pari a 5. Come starai immaginando, oltre la
funzione di conversione int esiste una funzione per ciascuno dei tipi di dati che ti ho insegnato:
float, booleano e stringa. E a proposito della funzione stringa, facciamo un esperimento! Invece
di convertire la variabile stringa in intero, proviamo a convertire la variabile intero in
stringa e vediamo che succede. Avviamo! Guarda un po’. Stavolta il risultato è la stringa 3 2.
Questo perché, ora abbiamo due stringhe. E il più fra due stringhe funge sempre da concatenazione,
non da addizione matematica. Quindi non otteniamo un numero 5 ma una stringa 3 2, formata
dalla concatenazione delle stringhe 3 e 2.
Benissimo, ora che abbiamo appreso tutte
queste nuove conoscenze, è il momento di applicarle alla nostra strepitosa app!
Iniziamo col rendere il codice più ordinato ed organizzato. Aggiungiamo all’inizio una
variabile nome_barman con valore EdoBot. Ed ora, uniamo queste due print in una sola, con
l’operatore di concatenazione: print, Mi chiamo, più, nome_barman, più, e sono pronto a servirti!
Bene così il messaggio verrà stampato tutto nella stessa riga, utilizzando inoltre la variabile
nome_barman. Proviamo ad avviare...ecco quà, perfetto! Facciamo la stessa cosa con
gli altri messaggi, Il drink più cool del nostro pub è:...più, e ora inseriamo la
variabile int, drink_speciale, avendo cura di convertirla in stringa grazie alla funzione
che abbiamo imparato. Facciamo similmente per la print seguente….stavola la variabile è float,
convertiamola sempre in stringa per concatenarla senza errori. Proviamo ad avviare...che
bellezza, il programma è sempre più carino.
Ora aggiungiamo al codice dei commenti! I
commenti sono delle frasi che possiamo inserire per spiegare a parole le diverse istruzioni
del codice. Sono molto importanti quando si lavora in team, perché se passiamo il codice a
un nostro collega, egli potrebbe far fatica a capirlo. O anche noi stessi, fra qualche mese,
potremmo dimenticarci i significati di certe istruzioni e il perché le abbiamo utilizzate. Ora,
la nostra app è molto semplice per adesso, ma fa sempre bene aggiungere qualche breve commento.
Per aggiungere un commento scriviamo cancellatto o hashtag. Questo simbolo serve per dire al
programma di ignorare completamente quello che scriveremo, perché si tratta appunto di
un commento, una spiegazione a parole che serve solo a noi umani per capire il codice.
L’ambiente di sviluppo riconosce il simbolo e lo evidenzia in rosso. Scriviamo ad esempio
“DICHIARAZIONE VARIABILI”, perché in questa sezione del codice stiamo dichiarando le variabili
che ci servono. Poi, dinanzi alla prima funzione, scriviamo “INIZIO DEL PROGRAMMA”, perché è da
qui in poi che inizia la sostanza. I commenti, sono utili e vantaggiosi, se non si usano in modo
eccessivo! Se inizio a commentare ogni istruzione, anche la più banale, con commenti poco rilevanti,
sto solo inquinando e appesantendo il codice, invece di renderlo comprensibile.
Perciò, non vi invito ad aggiungere un commento per ognuna di queste print, ad esempio,
perché sono già chiare e comprensibili di per sé.
Bene, dopo questa digressione sui
commenti, procediamo col codice!
Cancelliamo tutte queste istruzioni, che ora sono
un po’ di troppo, e inseriamo solo la richiesta più importante! Inserisci il tuo anno di nascita.
Questo carattere, \n, che precede la stringa, non è un errore di battitura. E’ un carattere
speciale delle stringhe che serve per andare a capo. Infatti se avvio il programma...ecco
qui, la stringa va subito a capo, perché inizia col carattere speciale, e poi continua col testo.
Così si crea un bello spazio che separa i messaggi introduttivi, dalle domande che andremo a fare
al cliente. Ora diamo al cliente la facoltà di rispondere inserendo il suo anno di nascita.
Scrivo anno_nascita, uguale, input. La input, come ricorderai, ritorna una stringa. Ma
vogliamo che anno_nascita sia un numero int, così non avverranno errori quando calcoleremo
l’età del cliente. Allora converto al volo il valore ritornato dalla input, racchiudendola
dentro la funzione int. Perfetto, ora posso usarla per calcolare gli anni del cliente. Scrivo
anni_cliente, uguale, 2021 che è l’anno attuale, meno l’anno di nascita del cliente. Ora possiamo
stampare a schermo l’età del cliente scrivendo print Hai, più, anni_cliente convertita in
stringa, perché di base è un intero, più, anni. Vediamo se funziona? Tre, due, uno, avvia!
Bene, dopo la richiesta di inserimento posso inserire 2005 ad esempio. Premo invio. Hai
16 anni, magnifico funziona benissimo!
Ora che abbiamo calcolato l’età voglio proporre
al cliente dei drink, ma tenendo a mente se è maggiorenne. Mi spiego meglio: se il cliente
è maggiorenne gli propongo drink alcolici e analcolici, stampandoli a schermo con
una print. Altrimenti, se è minorenne, stampo con una print soltanto drink analcolici.
Ma come posso eseguire una print o altre istruzioni, soltanto se è rispettata una
condizione da me decisa? E’ molto semplice, passiamo al file spiegazioni e vediamo insieme.
Immaginiamo di avere una variabile dov’è conservata l’età del cliente: anni_cliente
uguale 16, ad esempio. Bene, voglio che venga stampato a schermo con una print: "Sei
minorenne: puoi ordinare solo analcolici" , se il cliente è minorenne, ovvero….se anni_cliente
è minore di 18. Beh, scriviamo proprio questo: se anni_cliente è minore di 18, in inglese
se si dice if. Signori signori ecco a voi la dichiarazione if. Come vedete è leggibilissima,
stiamo scrivendo, quasi con parole vere e proprie, il requisito che ci interessa. Ora scriviamo
due punti, premiamo invio per andare a capo, e scriviamo il messaggio desiderato...bene! Avrai
notato che quando ho premuto invio per andare a capo, è comparso automaticamente una sorta di
spazio. Questo spazio si chiama indentazione. Tranquillo, ora ti spiego per bene tutto quanto.
La dichiarazione if serve per eseguire una o più istruzioni se e solo se una condizione è vera.
E’ costituita dalla parola chiave if, colorata in arancione, e dalla condizione da rispettare,
seguita dai due punti. Poi abbiamo un’indentazione e infine l’istruzione da eseguire se questa
condizione è vera. Ora anni_cliente è pari a 16, quindi è vero che è minore di 18! Perciò questa
print verrà eseguita. Avviamo il programma e….Sei minorenne puoi ordinare solo analcolici,
benissimo, il messaggio è stato stampato! Se torno al codice e cambio il valore anni_cliente a 23
ad esempio...questa condizione non sarà più vera! Quindi se eseguo il programma! Silenzio di tomba,
il messaggio non viene più stampato. Come vedi la dichiarazione if è estremamente utile! E ci offre
tante altre possibilità! Torniamo al codice. Nella condizione ho usato il simbolo minore. Questo si
chiama operatore di comparazione, e ne esistono tanti altri. Abbiamo il minore uguale, il
maggiore, il maggiore uguale. Il doppio uguale, che controlla se anni_cliente ha valore uguale
a 18. Attenzione a non usare l’uguale singolo. Questo è un operatore di assegnazione che
serve ad assegnare un valore alla variabile, come abbiamo fatto qui. E’ il doppio uguale che
serve a controllare se la variabile è uguale ad un valore. Possiamo anche controllare
se la variabile è diversa da un valore, usando punto esclamativo uguale. Tutti gli
operatori di comparazione appena visti, comparano due elementi e restituiscono un valore
booleano: Vero o Falso. Questo valore serve alla if per decidere se eseguire o meno l’istruzione
indentata. E a proposito, se cancelli per sbaglio l’indentazione puoi inserirla col tasto tab
sulla tastiera. Se dopo l’istruzione inserita vado a capo col tasto invio, posso inserire altre
istruzioni da eseguire se la condizione è vera, sempre mantenendo l’indentazione. Ma per
ora non ne abbiamo bisogno, cancelliamo e rimettiamo l’operatore che ci interessa: minore.
Ricapitolando, stiamo stampando Sei Minorenne se il cliente ha meno di diciotto anni. Ma in caso
abbia più di diciott’anni, voglio stampare Sei Maggiorenne. Come posso fare? E’ semplicissimo!
Dopo la dichiarazione if, aggiungo else, che in inglese significa altrimenti. Due
punti, invio...e qui, sempre con indentazione, scrivo "Sei maggiorenne: puoi ordinare alcolici
e analcolici". Semplice no? Nella if scriviamo le istruzioni da eseguire se la condizione è vera.
Nella else, scriviamo quelle da eseguire se la condizione è falsa. La else è opzionale, possiamo
aggiungerla solo se ne abbiamo bisogno. Proviamo ad avviare il codice? Ora anni_cliente è pari a
23, quindi la condizione della if è falsa. Perciò questa print non verrà eseguita, ma verrà eseguita
quella all’interno della dichiarazione else. Avviamo e...fantastico funziona! Sei maggiorenne,
puoi ordinare alcolici e alcolici ahhhh, che bello essere adulti! Oltre la else posso anche
aggiungere la dichiarazione elif! La elif viene eseguita se la condizione della if è false, ma se
un’altra condizione da noi specificata è vera. E’ molto utile, vi spiego subito. Se il cliente ha
meno di 18 anni stampo Sei minorenne. Altrimenti, se il cliente ha più di 80 anni voglio stampare:
Puoi ordinare alcolici, ma vacci piano nonno! Se ora il cliente ha 85 anni e avvio il
programma…ecco che compare la nostra frase, abbastanza antipatica! Posso inserire quante elif
desidero, una dopo l’altra. Sempre dopo la if, ma prima della else, se presente. Se abbiamo
una else alla fine, come in questo caso, essa verrà eseguita se la condizione della if e
di tutte le altre elif sono false. Ad esempio, se il cliente avesse un’età che non è minore
di 18, e non è neanche maggiore di 80, ad esempio 45 anni, verrà eseguita l’istruzione
nella else. Avvio il programma, e voilà!
Bene, oltre che coi numeri, int o float, possiamo
usare la dichiarazione if anche con le stringhe. Cancelliamo tutto e scriviamo il nome del
cliente che sta utilizzando la nostra app: nome_cliente uguale Piergiorgio ad esempio. Se
nome_cliente equivale a Giacomino, il nostro cliente preferito, voglio stampare a schermo "Ciao
Giacomino, che piacere rivederti! <3". Se avviamo il programma adesso...non verrà stampato alcun
messaggio...perché il nome_cliente non è uguale a Giacomino. Se sostituisco il nome_cliente con
Giacomino, la condizione sarà vera! Avviamo…ed ecco il nostro affettuosissimo messaggio!
Ottimo, abbiamo usato la dichiarazione if coi numeri, con le stringhe...e ora non resta
che usarla coi booleani! Cancelliamo tutto e creiamo una variabile booleana, pub_aperto uguale
True. Possiamo servire dei drink solo se il nostro pub è aperto, ovviamente. Allora scrivo if,
pub_aperto, equivale a True...stampa a schermo: Siamo pronti a servirti! Con le variabili booleane
posso anche scrivere soltanto if pub_aperto, il risultato sarà lo stesso, e così la condizione
è ancora più leggibile: se il pub è aperto, stampa Siamo pronti a servirti. Se avviamo, il messaggio
verrà stampato! Se torno al codice e inserisco False, riavviando non vedremo alcun messaggio.
Perfetto! Ora, immaginiamo di render disponibile un servizio di consegna a domicilio per i nostri
clienti. Vorrò stampare Siamo pronti a servirti, se il pub è aperto oppure se la
consegna a domicilio è attiva.
Come posso fare ciò? Facilissimo: con
gli Operatori di Logica Booleana.
Creo una nuova variabile consegna domicilio
attiva, uguale True. Ho abbreviato un po’ se no il nome è troppo lungo. Ora posso modificare
la if scrivendo: se pub aperto oppure consegna a domicilio è attiva. L’operatore or, è un
operatore booleano che controlla le due variabili e restituisce True se almeno una delle due è vera.
Esiste anche l’operatore and, che restituisce True solo se entrambe le variabili sono vere. Infine
abbiamo l’operatore not, che serve ad invertire il valore booleano di una variabile: se la variabile
è True restituirà False, se la variabile è False restituirà True. Ad esempio, cancelliamo un attimo
la condizione….posso scrivere if not pub_chiuso, cioè se il pub non è chiuso, stampa Siamo pronti a
servirti. Se la variabile ha valore True, quindi è vero che il pub è chiuso, la not restituirà False
alla funzione if, quindi il messaggio non verrà stampato. Ed è corretto, perché se il pub è chiuso
non vogliamo stampare Siamo pronti a servirti.
Possiamo anche usare più operatori booleani
per creare condizioni complesse! Ad esempio, se il pub non è chiuso, oppure la consegna a
domicilio è attiva, e non sono finiti i drink, possiamo servire i clienti. Beh, questa condizione
è un bel po’ complessa! La Logica Booleana offre un sacco di possibilità ma è sempre buona
norma creare condizioni brevi e comprensibili.
Ottimo, ora che abbiamo appreso un sacco di
ottime nozioni, possiamo continuare la nostra app. Torniamo a baristaVirtuale e, dopo aver calcolato
l’età del cliente, vogliamo offrirgli degli alcolici soltanto se è maggiorenne. Allora scrivo
una if: se anni cliente è minore di diciotto, stampa Sei minorenne, puoi ordinare solo
analcolici. Altrimenti Sei maggiorenne, puoi ordinare alcolici ed analcolici. Ho
messo un carattere a capo in entrambi per fare un po’ di spazio dai messaggi precedenti.
Un bel F5 per avviare il pogramma e...Inserisci il tuo anno di nascita...2000...Hai 21
anni, Sei maggiorenne, ottimo! Se riavvio il programma...e scrivo 2005….hai 16 anni,
Sei minorenne, bene funziona perfettamente.
Bene ragazzi, abbiamo già appreso un sacco di
nozioni Python, e ne impareremo tante altre, estremamente utili, nel corso del video.
Perciò è il momento giusto per assegnarti un bell’esercizio. Sarà breve ma racchiuderà tutte
le nozioni finora apprese, così potrai metterle in pratica e consolidarle. Se stai trovando il
video interessante lasciami un bel mi piace, è davvero gradito, e scrivimi in un commento come
mai hai deciso di imparare il Python, sono curioso di leggere le tue motivazioni! Iscriviti al canale
per non perdervi i prossimi video, didattici e di intrattenimento, sul mondo della programmazione.
E ora…vediamo l’esercizio.
Dobbiamo realizzare una mini-app che…
Definisce 3 variabili: prezzo_drink, pari a 5 euro e 50 centesimi, sconto,
pari a 1 euro e cliente preferito pari a Giacomino o un nome a tuo piacimento.
Chiede al cliente come si chiama
Chiede al cliente quanti anni ha
Se il cliente si chiama Giacomino e ha più di 25 anni applica uno sconto al
prezzo del drink. Altrimenti non lo applica.
Infine, stampa a schermo il prezzo
del drink, con una frase a piacere.
Se desideri provare a risolvere
l’esercizio, metti il video in pausa adesso e dedica qualche minuto alla risoluzione.
Ci sono diversi modi per risolvere l’esercizio, ora vi mostro una possibile soluzione.
Iniziamo col creare le variabili richieste: prezzo_drink uguale 5 euro e 50, sarà di tipo
float. Sconto, pari a 1 euro sarà un int. Cliente preferito uguale Giacomino sarà una stringa.
Stampiamo a schermo: Come ti chiami? E poi, con una input, conserviamo il nome inserito dal
cliente nella variabile nome_cliente. Similmente, chiediamo Quanti anni hai? E salviamo l’età
digitata in anni_cliente, dopo averla convertita al volo in numero intero.. Ora, per decidere se
applicare o no lo sconto è necessario scrivere una if. E ti dirò di più, la condizione della if sarà
formata da due sotto condizioni, perché dobbiamo verificare che il cliente si chiami Giacomino
e che abbia più di 25 anni. Allora scrivo se nome_cliente, equivale a cliente_preferito, ovvero
Giacomino, and se anni_cliente è maggiore di 25. Prendiamo prezzo_drink e sottraiamo lo sconto,
tramite l’operatore unario. Ora premo invio. Il cursore è ancora indentato, per aggiungere altre
istruzioni nella if. Ma non ne abbiamo bisogno, quindi cancelliamo l’indentazione ed inseriamo il
comando finale: print, Il prezzo del drink è, più, prezzo_drink convertito al volo in stringa. Ecco
fatto, l’esercizio è risolto! Se l’avete risolto in modo differente, scrivetemelo in un commento,
sono curioso di vedere e confrontare le vostre soluzioni. Ora torniamo alla nostra cara app. A
che punto eravamo arrivati? Beh, avevamo appena detto al cliente se gli è consentito ordinare
solo analcolici o anche alcolici. Ora però, vorrei definire una lista di alcolici e una
lista di analcolici disponibili nel nostro pub, stampare le liste a schermo e consentire al
cliente di scegliere i drink desiderati.
Ma come posso creare una lista di
valori? E’ facilissimo, torniamo al file delle spiegazioni e vediamolo insieme.
Le liste sono un elemento importantissimo del Python, e offrono una marea di funzionalità molto
utili. La lista è come una variabile, solo che la variabile contiene un solo valore, mentre la lista
contiene tanti valori. Proviamo a creare una lista di alcolici. Scrivo il nome della lista, alcolici,
uguale, e apro parentesi quadra. All’interno della parentesi quadra posso inserire tutti gli elementi
che voglio, separati da una virgola. Inseriamo alcuni alcolici a piacere, sottoforma di stringa.
Mojito virgola White Russian virgola Caipirinha. Basta così se no ci ubriachiamo. Chiudiamo
parentesi quadra e le nostra lista è pronta!
Abbiamo creato una lista omogenea di stringhe,
ma posso inserire anche numeri interi, float, booleani, variabili di qualsiasi tipo, insomma,
una lista può contenere tipi di dati eterogenei.
La stampiamo a schermo proprio
come stampiamo le variabili: print, nome della lista. Avviamo il programma
e voilà ecco un bel menù coi drink della casa.
Per riferirmi ad un elemento in particolare,
scrivo il nome della lista e apro parentesi quadre. All’interno di esse scrivo la posizione
dell’elemento che mi interessa. Il Mojito è in posizione zero, il White Russian in posizione
uno e la Caipirinha in posizione 2. Come vedete, si inizia a contare da zero, non da uno, non fate
questo errore. Allora, per riferirmi al Mojito, scrivo zero e chiudo parentesi quadra. Se
inserisco questo elemento dentro una print, verrà stampato a schermo! Avvio...ecco qua, Mojito.
Come vi dicevo prima, la lista offre una marea di funzionalità utilissime! Vediamole insieme.
Posso contare quanti elementi sono presenti nella lista, con la funzione len che sta per
lunghezza. Scrivo len, e fra parentesi tonde inserisco il nome della lista di cui calcolare
la lunghezza. Quindi, assegno il valore ritornato dalla funzione a una variabile che chiamo
quantità_alcolici, che poi stampo a schermo con una print. Avviamo e...viene stampato un bel
3! Perché nella lista sono contenuti 3 elementi.
La lista, è un insieme di elementi dinamico.
Significa che posso aggiungere, eliminare e modificare gli elementi. Per aggiungere un nuovo
elemento alla lista uso la funzione append. Scrivo il nome della lista, punto, append e, come per
ogni funzione che si rispetti, apro le parentesi tonde. All’interno di esse, inserisco l’elemento
che voglio aggiungere alla lista, ad esempio Daiquiri. Bene, quindi al momento della creazione
della lista alcolici vengono aggiunti i drink Mojito, White Russian e Caipirinha. Subito dopo
viene aggiunto il drink Daiquiri, tramite la funzione append. Perciò se stampo alcolici e avvio
il programma….ecco qui, vedo tutti e 4 i drink! La funzione append aggiunge l’elemento specificato
alla fine della lista. Se voglio aggiungere un elemento all’inizio della lista, o in qualsiasi
altra posizione, posso usare la funzione insert. Scrivo il nome della lista, punto, insert e...in
questa funzione devo specificare due valori. Il primo valore è un numero intero, che rappresenta
la posizione in cui voglio inserire l’elemento. Ricorda, le posizioni nelle liste si contano
iniziando da 0. Quindi se voglio inserire il nuovo elemento all’inizio della lista, cioè in
prima posizione, scrivo 0, se voglio inserirlo per secondo scrivo 1, per terzo scrivo 2 e così
via. Poi inseriamo una virgola e specifichiamo il secondo valore, che è l’elemento da inserire in
lista, ad esempio il drink “Martini”. Benissimo, se ora avviamo il programma...ecco, il
Martini è stato aggiunto in prima posizione, e tutti gli altri elementi sono scalati.
Posso anche eliminare un elemento dalla lista, utilizzando la funzione remove. Scrivo nome lista
punto remove e fra parentesi il nome dell’elemento da eliminare, ad esempio White Russian. Avviamo
il programma...ecco, ora la lista contiene solo Mojito e Caipirinha. Alternativamente posso
eliminare un elemento specificando non il suo nome, ma la sua posizione, grazie alla funzione
pop. Scrivo alcolici punto pop e...il White Russian e alla posizione uno, quindi scrivo 1.
Avviamo...perfetto, il risultato è lo stesso.
Oltre che aggiungere ed eliminare, posso anche
modificare un elemento. Ad esempio, per modificare il drink Caipirinha scrivo alcolici e tra quadre
scrivo 2. Uguale, e ora specifico il nuovo nome dell’elemento 2. Caipiroska ad esempio. Avviamo
ed ecco che Caipirinha è diventata Caipiroska!
Ora vi mostro una funzione molto utile
che serve per riordinare gli elementi di una lista. Immaginiamo di voler stampare un bel
menù dei drink in ordine alfabetico. Attualmente gli elementi sono disordinati...potrei ordinarli
manualmente, ma posso farlo in automatico con la funzione sort. Scrivo alcolici punto sort, avvio
e voilà, i drink sono ora in ordine alfabetico.
Possiamo anche concatenare due liste.
Immaginiamo di voler creare un menù di drink, che contiene sia alcolici che analcolici. Ho
già definito gli alcolici, quindi definiamo anche gli analcolici. Alcolici, uguale, aperta
quadra, Limonata virgola Gazosa, chiusa quadra. Ora creiamo la lista menù_drink e uniamo le due
liste grazie all'operatore di concatenazione. Così menù_drink conterrà sia i drink alcolici
che i drink analcolici! Stampiamola ed ecco quà, tutti i drink riuniti in un ghiottissimo menù.
Posso usare le liste anche in congiunzione con la dichiarazione if! La dichiarazione if
offre una funzionalità molto bella per controllare se un dato elemento è presente in
una lista. Ad esempio posso scrivere if Mojito in alcolici per verificare se questo drink
è presente nella lista. In caso affermativo posso stampare “La bevanda è disponibile!”.
Se avvio il programma....ecco che appare il messaggio! Se torno al codice e scrivo il nome di
un drink che non esiste...ecco, niente messaggio.
Bene, ora che abbiamo appreso le tante belle
funzionalità offerte dalle liste, proviamo ad utilizzarle per ciò che ci interessa. Volevamo
elencare al cliente i drink offerti nel nostro pub, ricordi? Allora scriviamo "Ecco i drink
alcolici disponibili:" e poi stampiamo tutti gli elementi della lista alcolici, uno dopo l’altro.
Come si fa? Beh abbiamo imparato che è sufficiente scrivere print alcolici ecco. Se però provo ad
avviare...la lista viene stampata con le quadre, gli apici, le virgole, non è molto carina da
vedere, e sarebbe meglio stampare i drink uno alla volta, riga per riga. Beh, ma abbiamo imparato che
possiamo stampare un solo elemento della lista, scrivendo alcolici e, tra quadre, il numero
dell’elemento. Iniziamo dallo 0. Ora aggiungiamo una print con gli altri due elementi. Se avvio il
programma….funziona, ora viene stampato un elenco bello ordinato e comprensibile. Ma torniamo
al codice. Per stampare questo elenco abbiamo ripetuto la stessa print per 3 volte.
ARGOMENTO: Principi di programmazione
Ogni volta che vi capita di scrivere del
codice in modo ripetitivo, vi deve subito balzare a mente una domanda: esiste un modo più
semplice, più breve e meno ripetitivo per fare ciò che sto facendo? Dopotutto la programmazione
in se è nata proprio per risolvere task lunghi e ripetitivi, e infatti esiste un principio di
programmazione importantissimo che si chiama DRY. DRY sta per Don’t Repeat Yourself, ovvero non
ripeterti! Un’altro principio che mi piace molto è il KISS: Keep It Simple Stupid, ovvero mantieni il
codice semplice, stupido! Questo principio serve per ricordarci, con tono abbastanza irriverente,
che dobbiamo evitare inutili complicazioni quando scriviamo codice. Di principi di programmazione
ne esistono tanti altri e sono molto utili da tenere a mente, perciò vi invito ad esplorarli.
Voglio terminare con una splendida citazione di John Woods, storico programmatore di videogiochi,
che recita: “Scrivi del codice immaginando che il collega che dovrà lavorarci in futuro sia
un violento psicopatico che sa dove abiti”.
Bene, quest’ultima frase ci motiva sicuramente
a scrivere del codice semplice e non ripetitivo. Ora, qui abbiamo ripetuto una semplice print per
sole 3 volte, non è troppo grave. Ma immagina se la lista fosse composta non da 3, ma da 10
drink, avremmo dovuto scrivere 10 print! E immagina se cancellassimo o aggiungessimo nuovi
drink alla lista...dovremmo tornare nel punto dove viene stampata e fare delle modifiche
complesse e scomode. Quindi voglio stampare la lista in modo più semplice ed efficiente,
per evitare problemi e visite da parte di psicopatici. A noi interessa stampare tutti gli
elementi della lista, che siano tanti o pochi.
Ma come possiamo estrarre uno ad uno, tutti
gli elementi di una lista, per stamparli con una print o usarli in altri modi?
Esiste un elemento fondamentale della programmazione che fa proprio al caso nostro.
Serve per ripetere una o più righe di codice automaticamente, e va molto d’accordo con
le liste. Signori e signore….il ciclo FOR! Cancelliamo questo obbrobrio e conosciamolo
insieme. Prima lo scrivo e poi ve lo spiego.
For...alcolico….in….alcolici...due punti a capo
e, con indentazione, print alcolico.Noterai subito che il ciclo for è molto leggibile! In italiano
leggiamo…per ogni...alcolico...dentro...la lista alcolici...stampa alcolico. In pratica stiamo
dicendo al programma di estrarre ogni alcolico, della lista alcolici e stamparlo ogni
volta con una print! E infatti questa print verrà ripetuta automaticamente tante
volte, in questo caso 3 volte, perché gli elementi della lista sono 3. Se aggiungiamo
altre istruzioni precedute da indentazione, verranno anch’esse ripetute, dopo la print.
Tecnicamente il ciclo for funziona così. Viene presa in riferimento la lista alcolici. Viene
letto il primo elemento della lista e salvato nella variabile alcolico. Quindi a questo punto
la variabile alcolico sarà pari a Mojito. Questa variabile possiamo utilizzarla come desideriamo,
ad esempio in una print. Una volta che la print, e le altre eventuali istruzioni indentate,
saranno state eseguite, il ciclo ricomincia. Ora viene letto il secondo elemento della
lista e salvato nella variabile alcolico. La variabile ha quindi cambiato valore, ora è
pari a White Russian. Le istruzioni indentate vengono eseguite e il ciclo ricomincia. Viene
letto il terzo valore e salvato su alcolico, che sarà ora pari a Caipirinha. Vengono eseguite
le istruzioni indentate ancora una volta. Adesso nella lista alcolici non vi sono più elementi da
leggere, quindi il ciclo termina. Non vedo l’ora di avviare il programma per vedere il ciclo for
in azione. Via. Wow fantastico, con poche righe di codice viene stampato l’elenco degli alcolici.
Interessante no? Invece di scrivere manualmente una print per ciascun elemento
in lista, usiamo il ciclo for per eseguire automaticamente una print per tutti
gli elementi in lista, non importa se sono 3 o se sono 100, li andrà a considerare tutti.
La variabile alcolico si chiama variabile di ciclo. L’ho chiamata alcolico ma potevo chiamarla,
drink, elemento o anche solo x. Ma chiamarla alcolico, in alcolici rende tutto molto più
leggibile, no? Infatti si cerca sempre di usare il nome della lista, al singolare, nei cicli for.
Come abbiamo detto, il ciclo for ripete le istruzioni indentate, tante volte quanti
sono gli elementi nella lista. Ma possiamo anche interrompere il ciclo se si verifica
una condizione da noi decisa. Ad esempio, voglio che il ciclo stampi Mojito e White Russian
ma termini prima di stampare Caipirinha. Posso usare una dichiarazione if all’interno del ciclo
for! Prima della print inserisco, if alcolico equivale a White Russian...break. Questo comando
serve per interrompere il ciclo. Queste modifiche fanno sì che alla seconda ripetizione del ciclo,
quando alcolico sarà pari a White Russian, verrà eseguito il comando break. Così il ciclo
si interromperà prima di eseguire la print sottostante, che avrebbe stampato White Russian,
e non eseguirà nemmeno la ripetizione seguente, relativa a Caipirinha. Se eseguiamo il
codice...ecco, la print viene eseguita solo per Mojito. Abbiamo un comando simile al break,
che si chiama continue. Questo comando non termina il ciclo ma termina solo la ripetizione. Perciò
alla seconda ripetizione, quando alcolico sarà pari a White Russian, il comando continue verrà
eseguito e la ripetizione verrà terminata, senza eseguire la print. Dopodiché il ciclo continuerà,
normalmente, con l’ultima ripetizione. Infatti, se avviamo il programma….vediamo che l’unico
elemento non stampato è proprio White Russian.
Benissimo, abbiamo visto che il ciclo
for è un carissimo amico delle liste, perché offre un sacco di funzionalità utili per
gestirle. Ma non si usa soltanto con le liste, possiamo usare il ciclo for con tutti gli elementi
iterabili. Un altro elemento iterabile sono le stringhe! Se io scrivo...per ogni lettera nella
stringa EdoBot. E stampo la variabile di ciclo, lettera. Avviando il programma verrà eseguita
una print per ogni lettera di EdoBot!
Infine, il ciclo for, può essere utilizzato con
range di numeri. Se mi servono tutti i numeri da 1 a 18 ad esempio, scrivo per ogni numero della
funzione range, 1, virgola, 19. La funzione range ritorna una serie di numeri, che vanno dal primo
al secondo valore specificato. Il primo valore è incluso nella serie, il secondo è escluso.
Perciò se mi interessano i numeri da 1 a 18, scrivo 1 19. Stampiamo la variabile
di ciclo, avviamo, ed ecco fatto!
Benissimo, dopo aver familiarizzato
per bene con le liste e col ciclo for, siamo pronti per applicare le conoscenze
apprese alla nostra app, baristaVirtuale.
Inseriamo suuubito subito le due nuove liste,
alcolici e analcolici, beeenissimo! Ora subito dopo aver presentato il drink speciale,
DigitalVodka, diciamo al cliente quanti alcolici e quanti analcolici sono disponibili. Scrivo print
e dopo un carattere a capo per distanziare un po’ dal messaggio precedente scrivo “I drink alcolici
sono” più, e ricordi? Con la funzione len, otteniamo la lunghezza della lista interessata,
ecco. Attenzione la lunghezza sarà un numero intero, quindi per poterla concatenare la
convertiamo in stringa, così. Benissimo, faccio similmente per gli analcolici. Ora
se avvio il programma...Yesss! Ecco i due nuovi messaggi che mi dicono quanti alcolici e
analcolici sono presenti nelle rispettive liste.
Bene, ora dobbiamo far sì che per i clienti
minorenni siano disponibili solo drink analcolici, mentre per i maggiorenni
sia alcolici che analcolici. Allora, dopo aver calcolato l’età del cliente, creiamo
una lista chiamata drink_disponibili che per ora sarà vuota. Se il cliente è maggiorenne,
dopo aver stampato questo messaggio, aggiungiamo nella stessa if drink_disponibili
+= analcolici. Ovvero, stiamo aggiungendo i drink analcolici ai drink disponibili. Se invece
il cliente è maggiorenne aggiungiamo assegnamo a drink_disponibili il risultato della
concatenazione delle liste analcolici e alcolici, così tutti i drink saranno presenti nella lista
drink_disponibili. Ora come abbiamo imparato, stampiamo tutti i drink disponibili, mediante
un bel ciclo for. Prima stampiamo “Ecco i drink consigliati per te”...e poi….per ogni
drink_disponibile nella lista drink_disponibili, stampa drink disponibile. Ora, per concludere,
diamo la possibilità alil cliente di scegliere un drink, e salviamo la sua scelta nella variabile
drink_scelto. Infine, se il drink scelto dal cliente è presente fra i drink disponibili,
stampiamo: Hai scelto, più drink_scelto, più Buon aperitivo! Altrimenti stampiamo:
Mi dispiace, il drink, drink_scelto, non è disponibile….con una faccina triste. Il nostro
barista virtuale è molto emotivo, devo dire!
Fantastico, ora la nostra app baristaVirtuale
è quasi terminata! Proviamo a testarla, facendo diverse scelte! Avviamo!
Inserisci il tuo anno di nascita...2005! Sei minorenne, ecco i drink consigliati
per te: Limonata e Gazosa, perfetto! Scelgo Gazosa….Hai scelto Gazosa, buon aperitivo! Ora
riproviamo con un’età maggiore di diciott’anni. Avvio...1995...ecco che i drink comprendono
ora anche gli alcolici! Scelgo Mojito... buon aperitivo, fantastico! Ora riavviamo...mettiamo
un anno...e proviamo ad inserire un drink non presente in lista...Spritz...Mi spiace, il drink
Spritz non è disponibile...Ottimo funziona! Però dopo questo messaggio il programma finisce. Senza
che il cliente abbia scelto un drink disponibile. Sarebbe carino se, dopo questo messaggio, venisse
ripresentata la lista dei drink disponibili, e il cliente possa riprovare a scegliere. Per
la precisione, torniamo al codice, voglio che venga ripetuta tutta questa porzione di codice,
in cui vengono stampati i drink consigliati, presa la scelta delil cliente, e stampati
i messaggi di conferma. Questa porzione di codice dev’essere ripetuta, finché il
cliente non sceglie un drink disponibile.
Ma come possiamo ripetere una porzione di codice
finché non è soddisfatta una data condizione? E’ davvero facile, trasferiamoci sul nostro bravo
file delle spiegazioni e vediamolo insieme.
Per ripetere una o più istruzioni, finché
rimane rispettata una data condizione, si utilizza il ciclo while che in inglese
significa finché. Facciamo un esempio. La variabile a è uguale a uno. Ora scriviamo un
ciclo while: finché la variabile a è minore di 5, ad esempio...due punti a capo. Con indentazione,
scriviamo una print: Tigre contro tigre. Vediamo subito che succede provando ad avviare il
programma! Ahhhh Tigre contro tigre ehm ok mi sono ingrippato. Il programma sta stampando
questo messaggio all’infinito! Come mai? Blocchiamolo forzatamente e torniamo al codice.
Un ciclo while si compone di tre elementi: La parola chiave while, ovvero finché. Una condizione
da rispettare, proprio come nelle dichiarazioni if. E infine, una o più righe di codice, precedute
da indentazione, che continueranno ad essere stampate finché questa condizione si mantiene
vera. Quando questa condizione diventa Falsa, il ciclo finisce. E’ per questo che Tigre
contro tigre viene stampato all’infinito. Perché la variabile a è pari a 1. E uno è minore
di 5, quindi questa condizione è vera. E siccome la variabile a non viene mai modificata, la
condizione sarà vera per sempre, quindi la print verrà eseguita all’infinito. Proviamo a stampare,
dentro la print, il valore della variabile a. Avviamo. Ecco qui, a è sempre pari a 1, come
previsto. Ora facciamo una cosa interessante. Ad ogni ripetizione, dopo aver stampato a, aumentiamo
di uno il suo valore, ecco fatto. Avviamo, e guarda un po! Vengono stampati i numeri da 1 a
4 e poi il ciclo si interrompe! Come mai? Torniamo al codice e vi spiego. All’inizio del ciclo
while viene controllato se a è minore di 5. Tale condizione è vera, perché a è pari a 1. Allora
viene eseguita la prima ripetizione del ciclo, ovvero viene stampata a e poi viene incrementata
di 1. Quindi adesso a è pari a 2. La ripetizione è terminata quindi si riprende dall’inizio.
Viene ricontrollata la condizione….A è ancora minore di 5 perché è pari a 2. Quindi viene
nuovamente stampata a schermo e incrementata. Il ciclo continuerà così finché a sarà pari a 4. La
variabile verrà stampata a schermo e incrementata di uno arrivando a 5. Ora la condizione non sarà
più vera, quindi il ciclo terminerà. E’ per questo che a schermo vediamo stampati i numeri da 1 a 4.
Anche il ciclo while, come il ciclo for, ha il comando continue, per interrompere
forzatamente una ripetizione, e il comando break, per interrompere l’intero ciclo.
Facciamo un’altro esempio di ciclo while, utilizzandolo per creare un giochino. Il
gioco consisterà in un indovinello, a cui il cliente dovrà rispondere. Se la risposta delil
cliente sarà errata, l’indovinello continuerà ad essere riproposto, all’infinito, finché il
cliente non indovinerà la risposta corretta.
Creiamo un ciclo infinito...scrivendo while...e
come condizione...True! Scrivendo esplicitamente True come condizione, essa sarà sempre vera. Ciò
renderà il ciclo infinito. Ma non spaventarti, lo termineremo noi, manualmente, col comando
break. Ora scriviamo l’indovinello: Che fa un uccellino dentro un computer? E acquisiamo la
risposta delil cliente con la funzione input, salvandola nella variabile risposta. Ora,
se risposta equivale a….chip!...stampiamo: risposta esatta, e terminiamo il ciclo grazie
al comando break. Altrimenti scriviamo Ritenta e andiamo a capo, senza break. Così il ciclo si
ripeterà, riproponendo l’indovinello. Ottimo, proviamo ad avviare il giochino! Che fa
un uccellino dentro un computer? abbaia? Ritenta...sostituisce la ram? Nemmeno...Fa chip?
Risposta esatta e il ciclo termina, perfetto!!
Ora, completiamo finalmente la nostra bellissima
app, baristaVirtuale, implementando il ciclo while appena appreso. Ricordi? Volevamo
ripetere tutta questa porzione di codice, se il cliente ordina una bevanda che non è
fra i drink disponibili. Allora inseriamo un ciclo while infinito, ovvero con condizione sempre
True, e indentiamo tutta la porzione da ripetere. Possiamo farlo rapidamente selezionandola e
usando lo shortcut Shift+Tab. Ecco fatto. Ora, dato che il ciclo è di base infinito, dobbiamo
decidere come terminarlo. Molto semplice, quando il cliente sceglierà un drink disponibile e sarà
pronto per l’aperitivo, aggiungiamo il comando break per terminare il ciclo. Benissimo, ora la
app per il nostro fantastico pub Drink&Codici è finalmente terminata! E’ stato un lavoro lungo
ma molto gratificante, perché abbiamo superato un sacco di problemi, imparando tantissime nozioni
di programmazione! Dopotutto, è quello che succede sempre, quando si intraprende la realizzazione
di un’app. Ora che è terminata la proviamo subito insieme! Prima di tutto vi ringrazio di
cuore per aver seguito questo tutorial. L’ho realizzato cercando di trasmettervi tutta la mia
grande passione per il mondo della programmazione, che è un mondo davvero creativo, divertente
e ricchissimo di opportunità professionali. Spero che le nozioni apprese in questo video
vi aiuteranno a migliorare la vostra attività lavorativa, a portare a conseguimento i
vostri studi o a godervi appieno i vostri hobby e progetti personali. Se il video vi
è piaciuto cliccate mi piace e commentate, per vedere i nuovi tutorial e video di
intrattenimento, e rimanere sempre aggiornati sul fantastico mondo della programmazione.
E per concludere, sentitevi liberi di rivedere questo tutorial ogni volta che ne avrete
bisogno. Ho diviso il video in capitoli, trovate il sommario in descrizione.
Così se mentre programmate non ricordate come si usano le liste o come si scrive la
dichiarazione if piuttosto che il ciclo for, potrete andare rapidamente al punto del video
dove spiego l’argomento che vi interessa.
Ora testiamo finalmente la nostra app avviando
il programma, via! Ecco che EdoBot ci accoglie calorosamente come sempre. Inserisci il tuo
anno di nascita, 2000...e inseriamo un drink disponibile, Spritz. Mi dispiace, il drink Spritz
non è disponibile e viene riproposta la scelta, fantastico!! Pepsi….RedBull...PitBull...ottimo,
la scelta viene sempre riproposta. Terminiamo con un meritatissimo White Russian...Hai scelto
White Russian, buon aperitivo! Grazie EdoBot, ce lo siamo proprio guadagnato!
Ancora grazie per l’attenzione, ragazzi, statemi bene e ci vediamo al prossimo video!
Buona programmazione!