Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni17 pagine

Cap 1 Python Per Tutti

Il capitolo introduce l'importanza della programmazione, evidenziando come i programmatori possano utilizzare i computer per svolgere compiti complessi e ripetitivi, liberando tempo per attività più creative. Viene spiegata l'architettura di base di un computer e la necessità di conoscere il linguaggio di programmazione, in particolare Python, per comunicare efficacemente con la CPU. Infine, si sottolinea che la programmazione è un'abilità creativa e gratificante che può essere appresa attraverso la pratica e l'esperienza.

Caricato da

n.casaburi
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni17 pagine

Cap 1 Python Per Tutti

Il capitolo introduce l'importanza della programmazione, evidenziando come i programmatori possano utilizzare i computer per svolgere compiti complessi e ripetitivi, liberando tempo per attività più creative. Viene spiegata l'architettura di base di un computer e la necessità di conoscere il linguaggio di programmazione, in particolare Python, per comunicare efficacemente con la CPU. Infine, si sottolinea che la programmazione è un'abilità creativa e gratificante che può essere appresa attraverso la pratica e l'esperienza.

Caricato da

n.casaburi
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Capitolo 1

Perché dovresti imparare a


programmare?

Scrivere programmi (o programmare) è un’attività molto creativa e gratificante.


Puoi scrivere programmi per molte ragioni, per guadagnarti da vivere, per effet-
tuare complesse analisi dei dati, per divertimento o per aiutare qualcun altro a
risolvere un problema. Questo libro presuppone che tutti abbiano bisogno di saper
programmare e che, una volta appreso come programmare, sappiano cosa fare con
le nuove capacità acquisite.
Ogni giorno siamo circondati da computer che vanno dai portatili agli smartphone.
Possiamo pensare a questi computer come ad una sorta di “assistenti personali” che
si prendono cura di molti aspetti della nostra vita. L’hardware degli elaboratori
moderni è essenzialmente costruito per porci continuamente la domanda: “Cosa
vorresti che faccia dopo?”

What What What


Next? Next? Next?

What What What


Next? Next? Next?

Figura 1.1: Assistente Digitale Personale

I programmatori hanno affiancato all’hardware un sistema operativo e una serie di


applicazioni che hanno permesso di ottenere un assistente personale digitale che si
è dimostrato utile e capace di aiutarci svolgendo compiti diversi.
I computer sono dotati di velocità oltre che di una grande quantità di memoria e
potrebbero esserci estramente utili se solo conoscessimo la lingua per spiegare loro
quello che vorremmo fosse “fatto dopo”. Se così fosse, potremmo dire al computer
di svolgere compiti ripetitivi al nostro posto. Va tenuto a mente che il tipo di
attività che i computer possono fare meglio sono spesso il genere di cose che noi
umani troviamo più noiose e logoranti.

1
2 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

Per esempio leggere i primi tre paragrafi di questo capitolo ed individuare quante
volte venga ripetuta la parola più comune. Anche se sei in grado di leggere e capire
le parole in pochi secondi, contarle è piuttosto difficoltoso in quanto non è il tipo di
problema per cui la nostra mente è stata concepita. Per un computer è l’opposto:
leggere e capire il testo è difficoltoso mentre è molto più semplice contare le parole
e indicarci quante volte è ripetuta la parola più usata.

python [Link]
Enter file:[Link]
to 16

Il nostro “assistente personale per l’analisi delle informazioni” ci ha rapidamente


detto che la parola “to” è stata usata sedici volte nei primi tre paragrafi di questo
capitolo.
Il fatto che i computer siano bravi in attività in cui gli umani non lo sono, è il motivo
per cui è necessario che tu diventi abile nel parlare un “linguaggio informatico”.
Una volta che avrai imparato questa nuova lingua, potrai delegare al tuo partner
(il computer) i compiti banali, ritagliandoti più tempo per le attività per cui sei più
portato. In altre parole, tu apporti a questa collaborazione creatività, intuizione
ed invettiva.

1.1 Creatività e motivazione


Sebbene questo libro non sia destinato a programmatori professionisti, la program-
mazione può essere un lavoro molto gratificante sia dal punto di vista finanziario
sia da quello personale. Scrivere programmi utili, eleganti e intelligenti affinché
possano essere utilizzati da altri è un’attività molto creativa. Il tuo computer o
il tuo Assistente Personale Digitale (PDA) di solito ha al suo interno molti pro-
grammi scritti da svariati team di sviluppatori, ciascuno dei quali in competizione
per conquistare la tua attenzione ed interesse. Fanno del loro meglio per soddisfa-
re le tue esigenze e fornirti, nel contempo, una meravigliosa esperienza d’uso. In
alcune situazioni, quando si sceglie uno specifico software, i programmatori sono
direttamente gratificati dalla tua scelta.
Se pensiamo ai programmi come alla produzione creativa di team di programmatori,
probabilmente la seguente immagine è una visione più ragionevole del nostro PDA:

Pick Pick Pick


Me! Me! Me!

Pick Pick Buy


Me! Me! Me :)

Figura 1.2: I Programmatori ti parlano

Per ora, la nostra motivazione principale non è guadagnare soldi o soddisfare altri
utenti, ma piuttosto essere più efficienti nella gestione di dati e informazioni che
incontreremo. In un primo momento, sarai sia lo sviluppatore sia l’utente finale
1.2. ARCHITETTURA HARDWARE DEL COMPUTER 3

dei tuoi programmi. Appena migliorerai le tue capacità come programmatore e la


programmazione ti sembrerà più creativa, potrai iniziare a pensare allo sviluppo
di programmi per conto di terzi.

1.2 Architettura hardware del computer


Prima di iniziare a imparare la lingua che useremo per sviluppare software, abbia-
mo bisogno di memorizzare un piccolo numero di nozioni su cosa costituisca un
computer. Se smonti il tuo computer o il tuo cellulare e ci guardi dentro, troverai
le seguenti parti:

What
Software Next?

Periferiche Central
di input e Processing Rete
di output Unit

Memoria Memoria
principale secondaria

Figura 1.3: Architettura dell’hardware

Le definizioni di alto livello di quelle parti sono le seguenti:

• La Central Processing Unit (o CPU) è la parte del computer che è stata


progettata per essere ossessionata dalla domanda “qual è la prossima istru-
zione?”. Ad esempio se il tuo computer ha una frequenza di 3.0 Gigahertz,
significa che la CPU si chiederà “qual è la prossima istruzione?” tre miliardi
di volte al secondo. Avrai bisogno di imparare come parlare velocemente per
poter stare al passo con la CPU.
• La Memoria principale viene utilizzata per memorizzare le informazioni di
cui la CPU ha bisogno nel minore tempo possibile. La memoria principale
è veloce quasi quanto la CPU ma le informazioni vengono memorizzate solo
fino allo spegnimento del computer.
• Anche la Memoria secondaria è utilizzata per conservare informazioni ma è
molto più lenta di quella principale. Il vantaggio della memoria secondaria è
che può conservare le informazioni anche quando il computer è spento. Esem-
pi di memorie secondarie sono i dischi rigidi o le memorie flash (generalmente
pennette USB e lettori multimediali portatili).
• I Dispositivi di Input ed Output sono lo schermo, la tastiera, il mouse, il
microfono, gli altoparlanti, il touchpad, ecc.. in altre parole tutti i dispositivi
con cui interagisci per comunicare con il computer.
• Ormai la maggior parte dei computer ha anche una Connessione di rete uti-
lizzata per scambiare informazioni con altri computer. Possiamo pensare alla
4 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

rete come ad una sorta di supporto molto lento per archiviare e recuperare
dati che potrebbe non essere sempre disponibile. Quindi, in un certo senso,
la rete è un tipo più lento e talvolta inaffidabile di memoria secondaria.

Anche se è meglio lasciare ai costruttori di computer la maggior parte dei dettagli


sul funzionamento di questi componenti, è utile conoscere un po’ di terminologia
in modo da poterci riferire a questi diversi componenti mentre scriviamo i nostri
programmi.
Come sviluppatore, il tuo compito è quello di utilizzare e armonizzare ciascuna di
queste risorse per risolvere problemi e analizzare i dati ottenuti. Come sviluppatore
“parlerai” per lo più con la CPU indicandole cosa fare dopo. A volte dirai alla
CPU di usare la memoria principale, la memoria secondaria, la rete o i dispositivi
di input/output.

What
Software Next?

Periferiche Central
di input e Processing Rete
di output Unit

Memoria
principale Memoria
secondaria

Figura 1.4: Dove sei?

Dovrai essere colui che risponderà alla domanda posta dalla CPU: “Quale è la
prossima istruzione?”. Ma diciamocelo: sarebbe molto scomodo rimpicciolirsi a 5
mm di altezza e introdursi nel computer solo per poter dare comandi tre miliardi di
volte al secondo. È più semplice scrivere in anticipo le istruzioni. Chiamiamo pro-
gramma queste istruzioni memorizzate e programmazione l’atto di scrivere queste
istruzioni e fare in modo che siano corrette.

1.3 Capire la Programmazione


Nel resto di questo libro, cercherò di trasformarti in una persona esperta nell’arte
della programmazione. Alla fine diventerai programmatore, forse non un program-
matore professionista, ma almeno avrai le capacità per esaminare un problema
relativo all’analisi di dati/informazioni e sviluppare un programma che lo risolva.
In un certo senso, avrai bisogno di due abilità per diventare un programmatore:
Per prima cosa, dovrai conoscere il linguaggio di programmazione (Python) di cui
avrai bisogno di padroneggiare vocabolario e grammatica. Dovrai essere in grado
di scrivere correntemente le parole e sapere come costruire frasi “ben strutturate”.
In secondo luogo, avrai bisogno di “raccontare una storia”. Per scrivere una storia,
devi combinare parole e frasi allo scopo di trasmettere un’idea al lettore. L’abilità
1.4. PAROLE E FRASI 5

nella produzione di storie è una capacità che si migliora scrivendo e ottenendo


feedback. Nell’ambito della programmazione il nostro programma è la “storia” e
il problema che stai cercando di risolvere è “l’idea”.
Una volta che avrai imparato un linguaggio di programmazione come Python, sarà
molto più facile impararne un secondo come JavaScript o C++. Sebbene il nuovo
linguaggio di programmazione abbia un vocabolario ed una grammatica molto
diversi rispetto a Python, la modalità di affrontare un problema è la medesima in
tutti i linguaggi di programmazione.
Imparai il “vocabolario” e le “frasi” di Python molto velocemente. Sarà, però,
necessario un tempo maggiore per essere in grado di scrivere un programma che
sia adatto a risolvere un problema nuovo. Si insegna a programmare in modo simile
a come si insegna a scrivere: Inizieremo con il leggere e comprendere i programmi,
quindi ne scriveremo alcuni semplici, in seguito scriveremo programmi sempre più
complessi. Ad un certo punto “troverai la tua ispirazione” e riuscirai a vedere da
solo lo schema e sarà più naturale affrontare un problema scrivendo un programma
che lo risolva. Arrivati a questo punto, programmare diventerà un processo molto
piacevole e creativo.
Iniziamo intanto con il vocabolario e la struttura dei programmi in Python. Sii
paziente: questi esempi semplici ti ricorderanno quando hai iniziato a leggere per
la prima volta.

1.4 Parole e frasi


A differenza della nostra lingua, il vocabolario di Python è in realtà piuttosto
limitato. Chiameremo questo “vocabolario” parole riservate. Queste sono parole
che hanno un significato molto speciale per Python. Quando le incontra in un
suo script, per Python hanno un solo ed unico significato. Più tardi, quando
scriverai codice, avrai la possibilità di creare altre parole cui assegnare un preciso
significato: le variabili. Avrai una grande libertà nello scegliere i nomi per le
variabili, ma comunque non potrai usare nessuna delle parole riservate come nome
per una variabile.
Nell’addestramento di un cane, vengono utilizzate parole speciali come “seduto”,
“resta”, “porta”, ecc. Quando parli con un cane e non utilizzi nessuna delle parole
riservate, ti guarderà in faccia con uno sguardo interrogativo fino a quando non
sentirà una parola riservata. Ad esempio, se dici “Ogni giorno Luigi fa una passeg-
giata per almeno due chilometri”, la maggior parte dei cani probabilmente capirà
solo “bla bla bla passeggiata bla bla bla bla.” Questo perché solo “passeggiata” è
una parola riservata nel linguaggio del cane. D’altro conto molti suggeriscono che
il linguaggio tra umani e gatti non abbia parole riservate1 .
Tornando a Python, le parole riservate includono:

and class elif for in nonlocal raise with


as continue else from import not return yield
assert def except global is or try
break del finally if lambda pass while
1 [Link]
6 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

Cioè, a differenza di un cane, Python è già stato completamente addestrato. Quan-


do dici “try” (prova), Python proverà ogni volta senza fallire un colpo.
A tempo debito impareremo l’utilizzo di queste parole riservate. Per ora ci concen-
treremo sull’equivalente in Python di “parlare” (in linguaggio uomo-cane). Il bello
di dire a Python di parlare è che possiamo persino indicargli cosa dire includendo
un messaggio tra virgolette:

print('Hello World!')

Abbiamo persino scritto il nostro primo comando Python sintatticamente corretto.


La frase inizia con la funzione print seguita da una stringa di testo a nostra scelta
racchiusa tra virgolette singole. Le stringhe nelle istruzioni di stampa sono rac-
chiuse tra le virgolette. Le virgolette singole e le virgolette doppie hanno la stessa
funzione; la maggior parte delle persone utilizza le virgolette singole tranne in casi
come questo in cui una virgoletta singola (che è anche un apostrofo) appare nella
stringa.

1.5 Conversare con Python


Ora che conosciamo una parola e una frase semplice in Python, abbiamo bisogno
di sapere come avviare una conversazione con Python per testare le nostre nuove
abilità linguistiche.
Prima di poter dialogare con Python, dovresti installare il software Python nel tuo
computer e imparare come avviarlo. Questa procedura è troppo dettagliata per
essere inclusa in questo capitolo, quindi ti suggerisco di consultare [[Link]]
([Link] dove ho scritto istruzioni dettagliate e screencast dell’in-
stallazione e dell’avvio di Python su sistemi Macintosh e Windows. Ad un certo
punto, potrai aprire un terminale o una finestra di comando e, digitando python,
si avvierà l’interprete Python in modalità interattiva e verrà visualizzato qualcosa
del genere:

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25)


[MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python è pronto per conversare con voi: il prompt >>> è il modo di chiedere “Cosa
vuoi che faccia dopo?” dell’interprete Python. Tutto quello che devi sapere è come
comunicare in Python.
Supponiamo, per esempio, che tu non sappia nemmeno le più basilari parole o
frasi del linguaggio Python. Potresti voler utilizzare le linee guida che usano gli
astronauti quando, atterrati su un pianeta lontano, vogliano comunicare con gli
autoctoni:

>>> I come in peace, please take me to your leader


File "<stdin>", line 1
1.5. CONVERSARE CON PYTHON 7

I come in peace, please take me to your leader


^
SyntaxError: invalid syntax
>>>

Non sta andando molto bene: a meno che tu non pensi qualcosa velocemente, è
probabile che gli abitanti del pianeta ti pugnalino con le loro lance, ti mettano su
uno spiedo, ti arrostiscano sopra un fuoco e ti trasformino nel piatto principale
della cena.
Fortunatamente hai portato con te una copia di questo libro e hai il dito fermo in
questa pagina. Riprova:

>>> print('Hello world!')


Hello world!

Questo è molto più chiaro, quindi prova a comunicare ancora:

>>> print('You must be the legendary god that comes from the sky')
You must be the legendary god that comes from the sky
>>> print('We have been waiting for you for a long time')
We have been waiting for you for a long time
>>> print('Our legend says you will be very tasty with mustard')
Our legend says you will be very tasty with mustard
>>> print 'We will have a feast tonight unless you say
File "<stdin>", line 1
print 'We will have a feast tonight unless you say
^
SyntaxError: Missing parentheses in call to 'print'
>>>

La conversazione stava andando così bene, poi quando hai fatto l’errore più piccolo
che si possa fare usando il linguaggio Python, “lui” ha tirato nuovamente fuori gli
artigli.
A questo punto, dovresti esserti reso conto che anche se Python è incredibilmente
complesso, potente e schizzinoso sulla sintassi da utilizzare per comunicare con
“lui”, non è affatto intelligente. In realtà stai solo avendo una conversazione con
te stesso, ma usando una sintassi corretta.
In un certo senso, quando utilizzi un programma scritto da qualcun altro, la con-
versazione si realizza tra te e gli altri sviluppatori, con Python come intermediario.
Per chi scrive codice Python è solo un modo di esprimere come dovrebbe procedere
la conversazione. In soli pochi altri capitoli, sarai uno di quei programmatori che
parlano agli utenti tramite il programma Python.
Prima di lasciare la nostra prima conversazione con l’interprete Python, dovresti
probabilmente conoscere il modo corretto per dire “arrivederci” alla fine di una
conversazione con gli abitanti del Pianeta Python:

>>> good-bye
Traceback (most recent call last):
8 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

File "<stdin>", line 1, in <module>


NameError: name 'good' is not defined
>>> if you don't mind, I need to leave
File "<stdin>", line 1
if you don't mind, I need to leave
^
SyntaxError: invalid syntax
>>> quit ()

Noterete che, nei due tentativi errati precedenti, l’errore è diverso. Nel secondo
caso, if è una parola riservata e Python, vedendo la parola riservata, pensava che
stessimo cercando di dirgli qualcosa, utilizzando una sintassi errata.
Il modo corretto per dire “arrivederci” a Python è digitare quit() al prompt inte-
rattivo >>>. Credo che ti ci sarebbe voluto un po’ per indovinarlo, quindi avere un
libro sull’argomento a portata di mano probabilmente si rivelerà utile.

1.6 Terminologia: interprete e compilatore


Python è un linguaggio di alto livello destinato a essere relativamente semplice da
leggere e scrivere per gli umani e altrettanto semplice da leggere ed elaborare per
i computer. Altri linguaggi di alto livello sono Java, C ++, PHP, Ruby, Basic,
Perl, JavaScript ecc. Purtroppo l’attuale architettura della Central Processing
Unit (CPU) non è in grado di capire nessuno di questi linguaggi di alto livello.
La CPU comprende solo quello che chiamiamo linguaggio macchina. Il linguag-
gio macchina è molto basilare e francamente molto stancante da scrivere poiché
composto esclusivamente da zeri e uno:

001010001110100100101010000001111
11100110000011101010010101101101
...

Il linguaggio macchina a prima vista sembra abbastanza semplice, dato che ci sono
solo zeri e uno, ma la sua sintassi è molto più complessa e molto più intricata
di quella del Python. Pertanto pochissimi programmatori scrivono in linguaggio
macchina. Piuttosto si preferisce utilizzare vari “traduttori” per consentire agli
sviluppatori di scrivere in linguaggi di alto livello come Python o JavaScript e
lasciare agli interpreti la conversione in linguaggio macchina per l’esecuzione da
parte della CPU.
Dato che il linguaggio macchina è legato all’hardware del computer, tale linguaggio
non è trasferibile tra diversi tipi di hardware. Contrariamente i programmi scritti
in linguaggi di alto livello possono essere spostati su architetture diverse utilizzando
l’interprete presente sulla nuova macchina o ricompilando il codice per creare una
versione in linguaggio macchina del programma adatta al nuovo sistema.
Questi traduttori di linguaggi di programmazione si dividono in due categorie
generali: (1) interpreti e (2) compilatori.
Un interprete legge il codice sorgente del programma così come è stato scritto
dal programmatore: analizza il codice sorgente e interpreta le istruzioni al volo.
1.6. TERMINOLOGIA: INTERPRETE E COMPILATORE 9

Python è un interprete, quando lo avviamo in modalità interattiva, digitiamo una


riga (una frase) e Python la elabora immediatamente, rimanendo poi in attesa
della successiva riga di Python.
Alcune delle righe di Python avvisano Python che vuoi che lui ricordi un valo-
re per un secondo momento. Va quindi scelto un nome per quel valore da ri-
cordare e da utilizzare per recuperarlo in un secondo momento. Con il termine
variabile facciamo riferimento alle etichette che usiamo per riferirci a questi dati
memorizzati.

>>> x = 6
>>> print(x)
6
>>> y = x * 7
>>> print(y)
42
>>>

In questo esempio, stiamo chiedendo a Python di: - memorizzare il valore 6 e di


adottare l’etichetta x per poter recuperare il valore in un secondo momento. - Poi,
tramite il comando “Print”, verifichiamo che Python abbia effettivamente registra-
to il valore assegnato alla variabile x. - Poi chiediamo a Python di recuperare x,
moltiplicarlo per 7 e assegnare il nuovo risultato a y. - Infine chiediamo a Python
di stampare il valore attualmente contenuto in y.
Anche se stiamo digitando questi comandi una riga alla volta, Python li tratta
come una sequenza ordinata di istruzioni permettendo alle successive istruzioni di
essere in grado di recuperare i dati creati precedentemente. Noi abbiamo scritto
il nostro primo semplice paragrafo composto di quattro frasi in un ordine logico e
che abbia un significato.
L’instaurare una conversazione interattiva simile alla precedente è nella natura di
un interprete. Un compilatore invece necessita di avere l’intero codice sorgente di
alto livello prima di avviare il processo di traduzione e successivo salvataggio in un
file eseguibile per l’esecuzione.
Nel sistema Windows, spesso questi eseguibili hanno un suffisso “.exe” o “.dll” che
indicano rispettivamente “eseguibile” o libreria DLL. In Linux e MacOsx, non esiste
un suffisso che contrassegni in modo univoco un file come eseguibile.
Se aprissimo un file eseguibile con un editor di testo, il contenuto ci sembrerà
completamente folle ed illeggibile:

^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
....

Non è semplice leggere o scrivere in linguaggio macchina, quindi è utile che si possa
disporre di interpreti e compilatori che permettano di scrivere in linguaggi di alto
livello come Python o C.
10 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

Ora, a questo punto della nostra discussione su compilatori e interpreti, ti starai


chiedendo qualcosa sull’interprete di Python. In che linguaggio è stato scritto? È
scritto in un linguaggio compilato? Cosa succede esattamente quando digitiamo
“Python”?
L’interprete di Python è scritto in un linguaggio di alto livello chiamato “C”.
Puoi dare un’occhiata all’attuale codice sorgente dell’interprete andando nel si-
to [[Link]] ([Link] nella sezione dedicata al codice
sorgente. Quindi Python è esso stesso un programma compilato in linguaggio mac-
china. Quando hai installato Python nel tuo computer (o se è stato installato
dal venditore), hai copiato una versione in linguaggio macchina adatta per il tuo
sistema. In Windows, il linguaggio macchina eseguibile per lo stesso Python è
probabilmente in un file con un nome simile a:

C:\Python35\[Link]

Questo è più di quanto tu abbia davvero bisogno di sapere per essere un program-
matore Python, ma a volte è utile rispondere subito a quelle piccole fastidiose
domande.

1.7 Scrivere un programma

Digitare comandi nell’interprete di Python è un ottimo modo per sperimenta-


re le funzionalità di Python, ma non è consigliabile per risolvere i problemi più
complessi.
Quando vogliamo scrivere un programma, possiamo utilizzare un editor di testo
per scrivere le istruzioni Python in un file chiamato script. Per convenzione, gli
script Python terminano con l’estensione .py.
Per eseguire uno script, devi indicare all’interprete Python il nome del file. Ad
esempio in una finestra di comando di Unix o Windows, puoi digitare python
[Link] come nel codice sottostante:

csev$ cat [Link]


print('Hello world!')
csev$ python [Link]
Hello world!
csev$

Il “csev$” è il prompt del sistema operativo e “cat [Link]” mostra che il file
“[Link]” ha una riga di codice Python per stampare una stringa.
Avvia l’interprete di Python dicendogli di leggere il codice sorgente dal file “hel-
[Link]” invece di chiederti in modo interattivo linee di codice.
Noterai che non è stato necessario inserire quit() alla fine del programma Python.
Quando Python legge il tuo codice sorgente da un file, sa di doversi fermare quando
raggiunge la fine del file.
1.8. COS’È UN PROGRAMMA? 11

1.8 Cos’è un programma?


Si potrebbe definire il termine programma nella sua accezione più basilare come una
sequenza di istruzioni Python scritte per eseguire un’azione. Anche il tuo semplice
script [Link] è un programma: è composto da una sola riga non particolarmente
utile ma, nella definizione più rigorosa, rimane un programma Python.
Per meglio capire cosa sia un programma potrebbe essere più facile pensare ad
un problema e, di conseguenza, cercando un programma che possa risolvere tale
problema.
Diciamo che stai facendo ricerche di Social Computing su alcuni post di Facebook
e ti interessa la parola più frequentemente usata in una serie di post. Potresti
stampare il flusso dei post di Facebook e scorrere il testo per cercare la parola
più comune, ma tale operazione ti richiederebbe molto tempo e sarebbe soggetta a
molti errori. Sarebbe meglio scrivere un programma in Python per gestire l’attività
in modo rapido e preciso, in modo da poter trascorrere il fine settimana facendo
qualcosa di divertente.
Ad esempio, considera il seguente testo riguardante un clown e una macchina.
Guarda il testo e cerca di capire quale sia la parola più comune e quante volte si
ripete.

the clown ran after the car and the car ran into the tent
and the tent fell down on the clown and the car

Quindi immagina di svolgere questo compito guardando milioni di righe di testo.


Onestamente, è più rapido imparare Python e scrivere un programma per contare
le parole, di quanto non sia fare la scansione manuale delle parole.
La notizia ancora migliore è che ho già creato un semplice programma per trovare
la parola più comune in un file di testo. L’ho scritto, l’ho testato e adesso te lo sto
dando per usarlo e risparmiare un po’ di tempo.

name = input('Enter file:')


handle = open(name, 'r')
counts = dict()

for line in handle:


words = [Link]()
for word in words:
counts[word] = [Link](word, 0) + 1

bigcount = None
bigword = None
for word, count in list([Link]()):
if bigcount is None or count > bigcount:
bigword = word
bigcount = count

print(bigword, bigcount)

# Code: [Link]
12 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

Non hai nemmeno bisogno di conoscere Python per utilizzare questo script. Hai
bisogno di completare il Capitolo 10 di questo libro per comprendere appieno le
fantastiche tecniche utilizzate per realizzare il programma. Tu sei l’utente finale,
usa semplicemente il programma e stupisciti della sua utilità e di come ti abbia
risparmiato così tanto lavoro manuale. Basta digitare il codice in un file chiamato
[Link] oppure scaricare il codice sorgente da [Link] ed
eseguirlo.
Questo è un buon esempio di come Python e il linguaggio Python agiscano come
intermediario tra te (l’utente finale) e me (lo sviluppatore). Python è un modo per
scambiare sequenze di istruzioni utili (es. programmi) in un linguaggio comune che
possa essere utilizzato da chiunque installi Python sul proprio computer. Nessuno
di noi sta quindi parlando a Python, piuttosto comunichiamo con altri attraverso
Python.

1.9 I blocchi per costruire i programmi

Nei prossimi capitoli approfondiremo maggiormente il vocabolario, la struttura


delle frasi e dei paragrafi e la storia di Python. Impareremo inoltre a conoscere le
potenti funzionalità di Python e come unirle per creare programmi utili.
Esistono alcuni modelli concettuali di basso livello che usiamo per progettare pro-
grammi. Questi costrutti non si limitano solo agli script Python ma sono applicabili
ad ogni altro linguaggio di programmazione, dal linguaggio macchina fino a quelli
di alto livello.

input Ottieni dati dal “mondo esterno”: Potrebbe trattarsi della lettura di dati
contenuti in un file, oppure direttamente da un sensore come un microfo-
no o un GPS. Nei nostri programmi iniziali, il nostro input verrà inserito
direttamente dall’utente tramite tastiera.
output Visualizza i risultati su schermo o li memorizza in un file o magari li invia
ad un dispositivo come un altoparlante per riprodurre musica o leggere del
testo.
esecuzione sequenziale Esegui le istruzioni una dopo l’altra nell’ordine in cui
sono state scritte nel codice.
esecuzione condizionale Verifica le condizioni previste ed esegui, o salta, una
sequenza di istruzioni.
esecuzione ripetuta Esegui ripetutamente alcune istruzioni, spesso con alcune
variazioni.
riutilizzo Scrivi una volta una serie di istruzioni e dà loro un nome per poi, even-
tualmente, riutilizzare quelle istruzioni durante l’esecuzione del programma.

Sembra quasi troppo semplice per essere vero? Ovviamente non è mai così semplice.
Sarebbe come dire che camminare è semplicemente “mettere un piede davanti
all’altro”. L’“arte” di scrivere un programma è il comporre ed unire molte volte
questi elementi di base per produrre un qualcosa che sia utile ai propri utenti.
Ad esempio, il precedente script per il conteggio delle parole utilizza quasi tutti
questi modelli.
1.10. COSA POTREBBE ANDARE STORTO? 13

1.10 Cosa potrebbe andare storto?


Come abbiamo visto nelle nostre precedenti conversazioni con Python, dobbiamo
comunicare in modo molto preciso quando scriviamo il codice. La più piccola
deviazione o errore farà sì che Python smetta di leggere il programma.
I programmatori alle prime armi spesso citano il fatto che Python non lasci spazio
ad errori come prova che Python sia cattivo, odioso e crudele. Anche se sembra
collaborare con tutti gli altri, Python riconosce i principianti e porta loro ranco-
re. A causa di questo rancore, Python prende i nostri script scritti in maniera
impeccabile e li rigetta come “inadatti” solo per tormentarci.

>>> primt 'Hello world!'


File "<stdin>", line 1
primt 'Hello world!'
^
SyntaxError: invalid syntax
>>> primt ('Hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'primt' is not defined

>>> I hate you Python!


File "<stdin>", line 1
I hate you Python!
^
SyntaxError: invalid syntax
>>> if you come out of there, I would teach you a lesson
File "<stdin>", line 1
if you come out of there, I would teach you a lesson
^
SyntaxError: invalid syntax
>>>

Si ottiene poco discutendo con Python: è solo uno strumento, non ha emozioni ed è
pronto a servirti ogni volta che tu ne abbia bisogno. I suoi messaggi di errore sono
inclementi, ma rappresentano solo la richiesta di aiuto di Python: ha esaminato
ciò che hai digitato e semplicemente non riesce a capire cosa tu voglia da lui.
Python è molto più simile a un cane, che amandovi incondizionatamente e cono-
scendo poche parole chiave, ti guarda dolcemente (>>>), aspettando che tu dica
qualcosa che sia in grado di capire. Quando Python visualizza “SyntaxError: in-
valid syntax”, sta dicendo, scodinzolando, “Mi sembra che tu abbia detto qualcosa
ma non ne capisco il significato; per favore continua a parlarmi (>>>).”
Man mano che i tuoi programmi diventeranno più sofisticati, potresti incappare in
queste tre tipologie di errore:

Errori di sintassi Questi sono i primi errori che farai e sono i più facili da correg-
gere. Un errore di sintassi indica che hai violato le regole della “grammatica”
di Python. Python farà del suo meglio per puntare direttamente alla riga e
14 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

al carattere in cui ha rilevato un errore. L’unico inconveniente degli errori di


sintassi è che a volte l’errore che deve essere corretto è in realtà in una fase
precedente del programma rispetto al punto in cui Python si è accorto di
essere confuso. Quindi la riga e il carattere in cui Python indica la presenza
di un errore di sintassi potrebbe rappresentare solo il punto di partenza della
tua ricerca.
Errori di logica: Un errore logico si verifica quando il tuo programma ha una
buona sintassi ma c’è un errore nell’ordine delle istruzioni o forse un errore
nel come queste si relazionino l’una all’altra. Un buon esempio di errore di
logica potrebbe essere: “bevi un sorso dalla tua bottiglia d’acqua, mettila nel
tuo zaino, cammina fino alla biblioteca e poi rimetti il tappo alla bottiglia”.
Errori di Semantica Un errore semantico si verifica quando la descrizione dei
passaggi da eseguire è sintatticamente perfetta e nel giusto ordine, ma c’è un
errore nel programma. Il programma è completamente corretto ma non fa
ciò che intendi fargli fare. Un semplice esempio potrebbe essere il dare ad
una persona le indicazioni per un ristorante dicendo: “. . . quando raggiungi
l’incrocio con la stazione di benzina, gira a sinistra e procedi per 1 km. Il
ristorante è l’edificio rosso sulla sinistra.” Il tuo amico è molto in ritardo e
ti chiama per dirti di trovarsi in una fattoria e che si sta aggirando dietro
un granaio, senza trovare alcuna traccia del ristorante. “Ma hai girato a
sinistra o a destra alla stazione di servizio?” e lui risponde “ho seguito
le tue indicazioni alla lettera, le ho perfino annotate: dicono di girare a
sinistra dal distributore di benzina e procedere per un km.” “Mi dispiace
molto, perché nonostante le mie istruzioni fossero sintatticamente corrette,
purtroppo contenevano un piccolo errore semantico non rilevato”.

Ribadisco che in tutte e tre le tipologie di errori, Python sta semplicemente facendo
del suo meglio per fare esattamente quello che gli hai chiesto.

1.11 Il percorso di studio

Mentre prosegui nella lettura di questo libro, non aver paura se i concetti non
sembrano amalgamarsi bene l’uno all’altro sin da subito. Quando stavi imparando
a parlare, non è stato un problema se hai passato i primi anni producendo solo
dei dolci gorgoglii. Non c’erano problemi se ci sono voluti sei mesi per passare
da un vocabolario limitato a semplici frasi, se ci sono voluti 5 o 6 anni in più per
passare da frasi a paragrafi e ancora qualche anno per essere in grado di scrivere
un avvincente racconto breve.
Poiché vorremmo che tu possa imparare Python rapidamente, ti insegneremo tutto
nei prossimi capitoli. Sarà come imparare un nuovo linguaggio che richiede tem-
po per essere assorbito e compreso prima che diventi naturale. Ciò causerà una
certa confusione mentre vedremo e rivedremo argomenti cercando di farti vedere il
quadro generale definendo i piccoli frammenti che lo compongono. Nonostante il
libro sia scritto in modo lineare, ed anche se stai seguendo un corso che proseguirà
linearmente, non esitare ad essere molto non-lineare nel modo in cui ti approcci
ai contenuti. Sbircia avanti e indietro e leggi ciò che ti pare. Sfogliando il mate-
riale più avanzato senza comprenderne appieno i dettagli, potresti capire meglio
il “perché?” della programmazione. Rivedendo il materiale precedente o rifacen-
1.12. GLOSSARIO 15

do gli esercizi precedenti, realizzerai che in realtà hai imparato molto anche se il
materiale che stai fissando ora sembra un po’ imperscrutabile.
Capita spesso che quando stai imparando il tuo primo linguaggio di programma-
zione, ci siano alcuni meravigliosi momenti di stupore in cui, mentre sei intento a
scalfire la tua pietra con martello e scalpello, puoi alzare lo sguardo e cominciare
a vedere che stai davvero realizzando una bellissima scultura. Di solito è inutile
restare svegli tutta la notte a fissare qualcosa che sembra particolarmente difficile.
Fai una pausa, fai un pisolino, mangia uno spuntino, spiega a qualcuno in cosa stai
avendo problemi (magari solo al tuo cane), così da ritornare al problema con occhi
nuovi. Ti assicuriamo che una volta acquisiti i rudimenti della programmazione
descritti nel libro, ti guarderai indietro e vedrai che tutto è stato molto semplice
ed elegante e ti ha solo richiesto un po’ di tempo per assimilarlo.

1.12 Glossario
Bug Un errore in un programma.
Central processing unit Chiamato anche “CPU” o “processore”. È il cuore di
qualsiasi computer ed è ciò che gestisce il codice che scriviamo.
Compilare Tradurre completamente in una sola volta un programma scritto in
un linguaggio di alto livello in un linguaggio di basso livello, in preparazione
per l’esecuzione successiva.
Linguaggio di alto livello Un linguaggio di programmazione come Python pro-
gettato per essere facilmente letto e scritto dagli umani.
Modalità interattiva Un modo di utilizzare l’interprete Python digitando sin-
goli comandi e espressioni al prompt.
Interprete Eseguire un programma scritto in un linguaggio di alto livello tradu-
cendo una riga alla volta.
Linguaggio di basso livello Un linguaggio di programmazione progettato per
essere eseguito da un computer; è chiamato anche “codice macchina” o
“linguaggio assembly”.
Codice macchina Il linguaggio di livello più basso, è il linguaggio che viene
eseguito direttamente dall’unità di elaborazione centrale (CPU).
Memoria principale Conserva programmi e dati. La memoria principale perde
le sue informazioni memorizzate quando il computer viene spento.
Analizzare Esaminare un programma e analizzare la struttura sintattica.
Portabilità Proprietà di un programma che gli permette di essere eseguito su più
di un tipo di computer.
Funzione di stampa Istruzione che fa in modo che l’interprete Python visualizzi
un valore su schermo.
Risoluzione dei problemi Il processo composto da formulare un problema, ri-
cercare una soluzione e fornire la soluzione.
Programma Un set di istruzioni che specifica un calcolo.
Prompt Si verifica quando un programma visualizza un messaggio a schermo e si
interrompe affinché l’utente possa digitare un input destinato al programma.

Memoria secondaria Generalmente più lenta della memoria principale, memo-


rizza programmi e dati e ne conserva le informazioni anche quando viene
tolta l’alimentazione. Esempi includono l’unità disco o la memoria flash
nelle chiavette USB.
16 CAPITOLO 1. PERCHÉ DOVRESTI IMPARARE A PROGRAMMARE?

Semantica Il significato di un programma.


Errore semantico Errore in un programma che gli fa fare qualcosa di diverso da
quello previsto dallo sviluppatore.
Codice sorgente Un programma scritto in un linguaggio di alto livello.

1.13 Esercizi
Esercizio 1: Quale è la funzione della memoria secondaria in un computer?
a) Esegue tutto il calcolo e la logica del programma
b) Recupera pagine Web da Internet
c) Conserva le informazioni a lungo termine, anche oltre un ciclo di alimentazione
d) Accetta input dall’utente
Esercizio 2: Che cos’è un programma?
Esercizio 3: Quale è la differenza tra un compilatore e un interprete?
Esercizio 4: Quale delle seguenti alternative contiene “codice macchina”?
a) L’interprete di Python
b) La tastiera
c) Un file sorgente di Python
d) Un documento di elaborazione di testo
Esercizio 5: Cosa c’è di errato nel codice seguente?:

>>> primt 'Hello world!'


File "<stdin>", line 1
primt 'Hello world!'
^
SyntaxError: invalid syntax
>>>

Esercizio 6: Dove viene memorizzata una variabile “x” simile a quella scritta
dopo la seguente linea Python?

x = 123

a) Unità di elaborazione centrale


b) Memoria Principale
c) Memoria Secondaria
d) Dispositivi di input
e) Dispositivi di output
Esercizio 7: Cosa verrà visualizzato dal questo programma?:

x = 43
x = x + 1
print(x)
1.13. ESERCIZI 17

a) 43
b) 44
c) x + 1
d) Errore perché x = x + 1 non è matematicamente possibile
Esercizio 8: Illustra ognuno dei seguenti esempi facendo dei paragoni con una
capacità degli uomini: (1) Unità centrale di elaborazione, (2) Memoria principale,
(3) Memoria secondaria, (4) Dispositivo di input e (5) Dispositivo di Output. Ad
esempio, “Qual è l’equivalente nell’uomo di una”Unità di elaborazione centrale“?
Esercizio 9: Come si corregge un “Syntax Error”?

Potrebbero piacerti anche