Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Python appunti corso base, Dispense di Programmazione Orientata agli Oggetti

Python appunti corso base bologna

Tipologia: Dispense

2019/2020
In offerta
30 Punti
Discount

Offerta a tempo limitato


Caricato il 28/12/2020

gaetano-brando
gaetano-brando 🇮🇹

4.6

(8)

4 documenti

1 / 67

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Appunti di Python 3
Brando Gaetano
Luglio 2020
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
Discount

In offerta

Anteprima parziale del testo

Scarica Python appunti corso base e più Dispense in PDF di Programmazione Orientata agli Oggetti solo su Docsity!

Appunti di Python 3

Brando Gaetano

Luglio 2020

Indice

Introduzione

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

Capitolo 1

Storia dell’informatica e dei computer

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.

1.1. L’ARCHITETTURA DI VON NEUMANN 3

  • Unità di memoria (RAM, Random Access Memory);
  • Unità di input, tramite la quale i dati vengono inseriti nel calcolatore per essere elaborati;
  • Unità di output, necessaria affinché i dati elaborati possano essere restituiti all’operatore;
  • Bus, un canale che collega tutti i componenti fra loro.

In poche parole, il funzionamento è il seguente:

  1. il processore acquisisce dati dalle periferiche di ingresso o da una memoria di massa
  2. li memorizza nella memoria RAM
  3. accede alla RAM ed effettua operazioni
  4. scrive i risultati nella RAM
  5. invia i risultati dalla RAM alle periferiche di uscita
  6. trasferisce i dati permanentemente sulle memorie di massa

Capitolo 2

Cos’è la programmazione

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è.

6 CAPITOLO 3. I LINGUAGGI DI PROGRAMMAZIONE E PYTHON

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:

  • La versione 3 è quella maggiormente utilizzata al momento e ha una collezione di «librerie» molto estesa e in continuo aggiornamento
  • La versione 2 ad aprile 2020 smetterà di essere aggiornata
  • Non vi è compatibilità fra programmi in Python 3 e il Python 2
  • La versione 3 sarà compatibile con le versioni successive

3.6. LO ZEN DI PYTHON E IL COMPORTAMENTO DEI PROGRAMMATORI 7

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

  • Aperto
  • Premuroso
  • Rispettoso

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:

  1. scaricare il codice sorgente all’indirizzo https://www.python.org/downloads/
  2. scaricare dei package manager completi tipo Anaconda

E’ preferibile, comunque, installare Python tramite codice sorgente.

3.8. IL PRIMO PROGRAMMA 9

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.

Capitolo 4

Le funzioni base e gli oggetti più semplici di

Python

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.

4.1 Le keyword e le funzioni built-in

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.

12 CAPITOLO 4. LE FUNZIONI BASE E GLI OGGETTI PIÙ SEMPLICI DI PYTHON

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:

  1. interi (il cui tipo è int );
  2. reali o a virgola mobile (il cui tipo è float );
  3. complessi (il cui tipo è complex , non ne parleremo);
  4. booleani (il cui tipo è bool ).

4.4.1 Interi

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.

4.4.2 Reali o a virgola mobile

I reali o a virgola mobile sono tutti i numeri in cui è presente la virgola. Qui di seguito alcuni esempi:

4.4. I NUMERI 13

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.

4.4.3 Booleani

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

4.4.4 La rappresentazione dei numeri

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:

  1. max : massimo numero a virgola mobile definito rappresentabile;
  2. min : minimo numero a virgola mobile normalizzato rappresentabile;
  3. epsilon : differenza fra 1 e il primo numero maggiore di 1 rappresentabile come un virgola mobile;

4.5. LE STRINGHE 15

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:

  1. indexing : dall’indice posso ottenere l’elemento: ad esempio, stringa[2] restituirà la terza lettera della stringa;
  2. slicing : ottengo gli elementi di una stringa contenuti fra due indici: ad esempio, stringa[2 : 5] restituirà le lettere della stringa comprese fra la posizione 2 e la posizione 5, con l’ultima esclusa.

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’

16 CAPITOLO 4. LE FUNZIONI BASE E GLI OGGETTI PIÙ SEMPLICI DI PYTHON

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

comando newline, ossia a capo

$ 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!