




























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
guida python per esame di informatica applicata
Tipologia: Guide, Progetti e Ricerche
1 / 245
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































Supporto editoriale: Elliott Hauser, Sue Blumenberg Cover Design: Aimee Andrion
Copyright ~2009- Charles Severance.
Quest’opera è rilasciata sotto licenza Creative Common Attribution-Non Commercial-Share Alike 3.0 Unported. Questa licenza è disponibile all’indirizzo:
http://creativecommons.org/licenses/by-nc-sa/3.0/
La definizione di ciò che l’autore considera uso commerciale e non-commerciale di questo materiale così come le esenzioni alla licenza sono disponibili nell’Appendice intitolata Dettagli sul Copyright.
iv
L’obiettivo finale di tutti questi cambiamenti è quello di includere in un corso di primo livello solo quegli argomenti che potranno tornare utili anche a coloro che non sceglieranno di diventare programmatori professionisti. Gli studenti che troveranno questo libro interessante e che vogliano esplorare ul- teriormente l’argomento, dovrebbero considerare il libro Think Python di Allen B. Downey. Date le molte sovrapposizioni tra i due libri, gli studenti saranno in grado di acquisire rapidamente alcune ulteriori competenze nelle ulteriori aree della tec- nica di programmazione e del pensiero algoritmico che sono parte di Think Python. Inoltre, dato che i due libri hanno uno stile di scrittura simile, per loro sarà facile muoversi all’interno di Think Python. Come detentore del copyright su Think Python , Allen mi ha dato il permesso di cambiare la licenza del materiale dal suo libro che viene incluso in questo libro, da GNU Free Documentation License alla più recente Creative Commons Attri- bution — Share Alike license. Questo segue il generale cambiamento nelle licenze di documentazione aperta che si stanno spostando da GFDL a CC BY-SA (vedi Wikipedia). L’utilizzo della licenza CC BY-SA indica ai fruitori dell’opera che essa può essere utilizzata, diffusa e anche modificata liberamente, pur nel rispetto di alcune condizioni essenziali e rende ancora più semplice ai nuovi autori riutilizzare questo materiale. Ritengo che questo libro sia un esempio del perché i materiali aperti siano così importanti per il futuro della formazione. Voglio ringraziare Allen B. Downey e la Cambridge University Press per la loro decisione lungimirante nel rendere il libro disponibile sotto un open Copyright. Spero che siano soddisfatti dei risultati del nostro impegno collettivo e mi auguro lo siate anche voi lettori.
Vorrei ringraziare Allen B. Downey e Lauren Cowles per il loro aiuto, la pazienza, e la guida nell’affrontare e risolvere i problemi di copyright riguardanti questo libro. Charles Severance www.dr-chuck.com Ann Arbor, MI, USA 9 settembre 2013 Charles Severance è Clinical Associate Professor presso l’Università del Michigan
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 Next?
What Next?
What Next?
What Next?
What Next?
What 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.
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 words.py Enter file:words.txt 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 Me!
Pick Me!
Pick Me!
Pick Me!
Pick Me!
Buy 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
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.
Periferiche di input e di output
Software
Memoria principale
Central Processing Unit
What Next?
Rete
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à
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 riservate^1.
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) http://xkcd.com/231/
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 "
", 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):
File "
if you don't mind, I need to leave File "
", 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.