



























































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
Python appunti corso base bologna
Tipologia: Dispense
1 / 67
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




























































In offerta
Questi appunti sono utili per chi si avvicina per la prima volta alla programmazione in sè, oppure chi -anche già sapendo programmare - si avvicina a Python per la prima volta o, per chi già usa Python, è un utile Bignami. Tali note sono state scritte per una versione di Python superiore alla 3.7. Alcune note:
Quando vedete questo blocco,viene indicato del codice Python. Quando la riga inizia col $ rappresenta la scrittura a video del risultato.
Esercizio
Quando c’è questo blocco, viene proposto un esercizio da fare a casa.
Programma
Quando c’è questo blocco, viene proposto un programma completo.
Infine
Se vedete una riga così, è riportato un codice inserito su riga di comando
Nelle seguenti pagine il codice è stato testato direttamente sulla shell di Python: quindi a volte compare il print, altre no. Ricordatevi che se lo lanciate su un IDE il print va sempre insrito. Come sempre, quando si scrive qualcosa si legge e si rilegge il tutto quattro volte, ma spesso non basta. Se trovate qualche orrore, non abbiate pura di dirmelo.
iv
L’informatica ha origine molto antiche: già i Babilonesi, i Cinesi e gli Indiani prima dell’anno 1000 a.C. usavano strumenti per automatizzare il calcolo dei dati.
Figura 1.1: La macchina di Anticitera
Più vicino a noi, la macchina di Anticitera è il più antico calcolatore meccanico conosciuto, datato tra il 150 e il 250 a.C. Si trattava di un sofisticato planetario, mosso da ruote dentate, che serviva per calcolare il sorgere del sole, le fasi lunari, i movimenti dei cinque pianeti allora conosciuti, gli equinozi, i mesi, i giorni della settimana e le date dei giochi olimpici. Anche gli Arabi, durante il Medioevo, migliorarono o crearono strumenti meccanici per il computo del tempo e della posizione: bussola, orologi, astrolabio, ecc.
Da quando i logaritmi vennero introdotti all’inizio del 1600, seguì un periodo di considerevole pro- gresso nella strumentazione per il calcolo automatico, grazie a inventori e scienziati. La pascalina è uno strumento di calcolo precursore della moderna calcolatrice. Fu inventata nel 1642 dal matematico e filosofo francese Blaise Pascal. Lo strumento consente di addizionare e sottrarre numeri composti da un massimo di dodici cifre, operando automaticamente i riporti.
Charles Babbage è spesso riconosciuto come uno dei primi pionieri della computazione automatica. Babbage ideò una macchina per il calcolo automatico di grande complessità, la macchina differenziale, che riuscì a realizzare tra mille difficoltà, anche per i limiti della meccanica del tempo. Una strada era stata aperta, anche se sarà solo con l’avvento dell’elettronica che la rivoluzione del calcolo automatico, iniziata 2300 anni prima, diventerà un fenomeno planetario.
In poche parole, il funzionamento è il seguente:
Cosa significa programmare? La definizione migliore la troviamo in un vecchio libro di C++, in cui l’autore dava una definizione granitica della stessa.
La programmazione consiste nella scrittura di un testo, chiamato programma sorgente , che descrive in termini di istruzioni note alla macchina, la soluzione del problema in oggetto.
Quindi non è che la ricerca della soluzione più semplice e breve a un dato problema. Come potete immaginare, per un problema non esiste una soluzione unica, anzi esse potrebbero essere molte e diverse fra loro. La programmazione consiste proprio nel trovare la strada più efficiente che conduce alla soluzione. Il filosofo Bertrand Russel argomentava che per fare matematica ci volesse più fantasia di un poeta. L’informatica è una branca della matematica: quindi programmare è un’operazione “creativa”! Come ogni costruzione umana, la programmazione è operazione complessa: per semplificarla usiamo passaggi o "step" successivi. Sempre nel libro indicato sopra, c’era una definizione operativa della programmazione alquanto criptica, ma che nella sostanza intendeva quanto segue:
Programmare significa adattare alla "logica" di una macchina processi risolutivi semplici, comprensibili da una persona e in ordine temporale.
La logica di una macchina è data dalle operazioni elementari che essa può svolgere, i processi risolutivi sono i passaggi necessari a risolvere il problema. Per risolvere un problema con un elaboratore elettronico, conviene passare attraverso una serie di tappe intermedie, che condurranno infine alla scrittura del programma. La più importante è il " passo 0 ": capire il problema e controllare che sia " ben posto ": devo conoscere quali input passare e almeno intuire il tipo di output. La successiva tappa è la determinazione del meccanismo di soluzione del problema. Questo fase è detta problem solving e il meccanismo che utilizzeremo è l’ algoritmo. L’algoritmo è una descrizione che specifica una serie di operazioni, eseguendo le quali è possibile risolvere un determinato problema. L’ultimo passo è tradurre l’algoritmo in una serie di comandi da passare al computer. Tale fase è detta implementazione e consiste nello scrivere il codice sorgente: un programma è un algoritmo espresso in un linguaggio di programmazione.
Esercizio
Prova ad elencare tutte le operazioni che esegui senza pensare la mattina quando prepari il caffè.
questo motivo dal 1995 è conosciuto come il BDFL, Benevolent Dictator For Life. Nel 2001 nasce la Python Foundation che ha il compito di promuovere Python. Ognuno di noi può chiedere che vengano apportati cambiamenti o benefici al linguaggio. Questo viene fatto attraverso i PEP , Python Enhancement Proposal: sono documenti pubblici discussi dalla comunità di Python e approvati in ultima istanza da Guido.
3.4 Python: perchè usarlo
Python è un linguaggio robusto e maturo, che può essere utilizzato in moltissimi ambiti: dal web alle interfacce grafiche, dal networking ai database, dal calcolo numerico alle applicazioni scientifiche, dai videogiochi alla grafica, dall’IA alla programmazione quantistica, ecc..
E’ multipiattaforma, ossia disponibile per i principali SO, da Windows a Linux e Mac, dove è già incluso nell’installazione. Inoltre è portabile, ossia si comporta allo stesso modo se eseguito su piattaforme differenti. Seguendo le indicazioni di un "pythonista" italiano, sono sette i motivi principali per utilizzarlo:
3.5 Python: quale versione usare
Al momento le versioni più utilizzate sono la 2.7 e la 3. In questo corso useremo la versione 3 per alcuni semplici motivi:
3.6 Lo zen di Python e il comportamento dei programmatori
Come ogni stile di vita, anche Python ne ha uno. In questo caso riguarda come scrivere il codice ed è noto come " pythonic way. Nel 1999 Van Rossum e Tim Peters proposero, su richiesta dei membri della community, una serie di 19 aforismi per spiegare cosa significa "scrivere in Python" e quale doveva essere lo spirito dello stesso. Ecco il testo tradotto.
Lo zen di Python di Tim Peters
Bello è meglio che brutto. Esplicito è meglio di implicito. Semplice è meglio che complesso. Complesso è meglio di complicato. Lineare è meglio che nidificato. Sparso è meglio di denso. La leggibilità conta. I casi speciali non sono abbastanza speciali per infrangere le regole. Anche se la praticità batte la purezza. Gli errori non dovrebbero mai essere ignorati. A meno che non vengano esplicitamente messi a tacere. In caso di ambiguità, rifiuta la tentazione di indovinare. Ci dovrebbe essere un modo ovvio, e preferibilmente uno solo, di fare le cose. Anche se questo modo potrebbe non essere ovvio da subito, a meno che non siate olandesi. Ora è meglio che mai. Sebbene mai sia spesso meglio che proprio adesso. Se l’implementazione è difficile da spiegare, l’idea è pessima. Se l’implementazione è facile da spiegare, l’idea può essere buona. I namespace sono una grandissima idea, usiamoli il più possibile!
Ad una prima lettura sembra di leggere gli oracoli della Pizia, ma col tempo impareremo a riconoscere come queste frasi abbiamo un senso. Dopo la richiesta su come scrivere, la comunità richiese anche di descrivere in poche parole come ci si debba comportare rispetto agli altri membri della stessa. Tutta la comunità decise che un programmatore Python rispetto alla stessa deve essere
3.7 Dove scaricare Python e quale IDE usare
Come detto, Python è già installato su Linux e Mac. Dobbiamo prestare attenzione se la versione che utilizziamo è la 3. Vi sono due modi principali per installare Python:
E’ preferibile, comunque, installare Python tramite codice sorgente.
print(’Hello world!’)
Clicco su Invia e
Su un IDE, scrivo il comando su un file che salverò con estensione ".py" e poi sempre lanciando lo script avrò il medesimo risultato.
In questo capitolo, introdurremo le funzioni standard e i tipi di dati con cui interagiamo di più nello scrivere in Python. Definiremo anche cosa siano gli oggetti.
Quando installiamo Python, vengono installate anche un set di keywords o parole chiavi e funzioni da subito utilizzabili.
False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield
Tabella 4.1: Keywords
abs delattr hash memoryview set all dict help min setattr any dir hex next slice ascii divmod id object sorted bin enumerate input oct staticmethod bool eval int open str breakpoint exec isinstance ord sum bytearray filter issubclass pow super bytes float iter print tuple callable format len property type chr frozenset list range vars classmethod getattr locals repr zip compile globals map reversed import complex hasattr max round
Tabella 4.2: Funzioni built-in
Un elenco non esaustivo è nell’appendice A.
4.4 I numeri
I numeri sono gli elementi base di qualsiasi cosa noi facciamo (punti in un videogame, acquisti su Amazon, ecc). In Python si dividono in:
Gli interi non hanno limite e la loro rappresentazione dipende dalla memoria del pc. Qui di seguito alcuni esempi e le principali operazioni che posso eseguire sugli interi (e su ogni altro tipo di numero):
a = 15 b = 2342 c = 1560362 d = - a + b # somma $ 2357 a - c # sottrazione $ - a * a # moltiplicazione $ 225 c / b # divisione $ 666. c // b # divizione intera $ 666 c % b # modulo, ossia il resto della divisione $ 590 a ** 4 # elevamento a potenza $ 50625 a == b # operatore di confronto (a uguale a b) $ False a != c # operatore di confronto (a diverso da c) $ True a > b # operatore di confronto ( maggiore di) $ False b <= c # operatore di confronto ( minore o uguale di) $ True
Attenzione, quindi, al risultato degli operatori di confronto, che può essere True o False.
I reali o a virgola mobile sono tutti i numeri in cui è presente la virgola. Qui di seguito alcuni esempi:
a = 0. b = -1526. c = 1.5e
E se opero fra interi e reali, il risultato cosa sarà?
a = 15 b = 253. a + b $ 268.
Il numero booleano ha solo due valori possibili: vero ( True ) o falso ( False ). In Python quando gli uso nelle operazioni matematiche vengono valutati come gli interi 1 e 0.
a = True b = False 1 + a $ 2 1 + b $ 1 b + a $ 1 b * a $ 0
Un buon programmatore deve sapere quali sono i limiti della macchina nel rappresentare i numeri, specialmente quelli in virgola mobile. In nostro aiuto viene la classe built-in sys. Ne parleremo più avanti. Da shell o da IDE lanciamo i seguenti comandi e vediamo cosa ci dicono.
import sys sys.float_info $ sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
Fra tutti questi dati a noi interessano:
nome = ’Gaetano’ cognome = ’Brando’ nome_completo = f"{nome} {cognome}" testo_video = f"Bentornato, {nome_completo}!" print(testo_video) $ Bentornato, Gaetano Brando!
Quindi, per inserire il valore di una variabile in una stringa, pongo la lettera f prima del doppio apice, metto il nome della variabile dentro due parantesi grafe e chiudo la stringa. Sarà Python a fare il lavoro. Le stringhe sono oggetti formati da elementi ordinati: ad ogni lettera corrisponde un numero (da 0 in poi) detto indice che ne determina la posizione. Per conoscere quanti elementi compongano la mia stringa, uso la funzione built-in len. Vi sono due operazioni che, grazie all’indicizzazione, posso compiere sulle stringhe:
Andiamo a vedere:
stringa = "Ammazzachemazza" stringa $ ’Ammazzachemazza’ len(stringa) $ 15 stringa[2] #Indexing $ ’m’ stringa[15] #Indexing --> Attenzione $ Traceback (most recent call last): File "", line 1, in IndexError: string index out of range stringa[-2] #Reverse Indexing $ ’z’ stringa[1:3] #Slicing: elementi da pos. 1 a 3, 3 esclusa $ ’mm’ stringa[1:4] #Slicing: elementi da pos. 1 a 4, 4 esclusa $ ’mma’ stringa[:4] #Slicing: tutti gli elementi fino alla 4 esclusa $ ’Amma’ stringa[::2] #Slicing: tutti gli elementi presi ogni 2 pos. $ ’Amzahmza’
Posso trasformare una stringa in un numero e viceversa tramite il casting grazie alle funzioni built-in int o float e str :
a = 15 s = "25.3" s $ ’25.3’ str(a) $ ’15’
float(s) $ 25.
Infine esiston le stringe raw : servono quando voglio che Python scriva esattamente quello che desidero:
print(’C:\dir\nome’) # Python legge \n come
$ C:\dir ome print(r’C:\dir\nome’) $ C:\dir\nome
4.6 I commenti
La programmazione, nella maggior parte dei casi, si fa in gruppo. Ognuno di noi ha un modo di scrivere che può essere difficilmente capito da chi legge. Per questo è utile usare i commenti. Negli esempi precedenti quando vedete un cancelletto (#) seguito da frasi, ecco quello è un commento: Python legge tutto, ma capisce che dopo il cancelletto non vi è codice da eseguire. Utilizzateli spesso: non sapete quanto siano utili!