Scarica Dispensa Python 2o parziale computer science e più Dispense in PDF di Patente Europea del Computer (ECDL) solo su Docsity!
LEZIONE 9-10:
Cos’è la programmazione: serve per istruire una macchina a fare una serie di operazioni. Noi impariamo regole che ci permettono di dare istruzioni. Come funziona il processo di sviluppo di un programma:
- Requisiti
- Analisi (cosa dovrà fare il programma)
- Progettazione (sulla carta o sulla shell del programma)
- Implementazione (dalla carta al computer)
- Test (se non va bene -> debugging (=ricerca dei “bugg” ovvero i problemi, fino a progettazione)
- Esecuzione Algoritmo: Permette di trovare la soluzione ad un problema. E permette anche di sezionare il problema. Da 1 LOC(=riga di codice) a un programma: Ogni riga di codice da un solo comando semplice, il loro insieme genera il programma. Scratch: Come vengono gestiti e memorizzati i dati: Architettura di un computer:
- CPU = processore che elabora i dati ed esegue le operazioni
- Memoria = per allocare sia temporaneamente i dati sia in maniera stabile
- Dispositivi di input e output
- Bus: trasferiscono info da un componente all’altro I dati vengono gestiti solo sotto forma di codice binario (010010010001) Per tradurre il programma in linguaggio macchina: (da programma a CPU):
- Compilazione: traduzione dell’intero programma prima che venga eseguito. Ma una volta tradotto se sbaglio una cosa sono cazzi e devo rifare tutto da capo.
- Interpretazione: traduzione ed esecuzione immediata di singole istruzione. (es. Phyton) e si può correggere.
Cos’è Python: Un linguaggio di programmazione di alto livello. È open source, posso trovare delle cose già fatte online. Ci sono moltissime librerie dove trovare quello che ci serve. (pypi.org) Scaricando Python ho solo le opzioni base, poi man mano che mi serve qualcosa lo importo dalle librerie. IDLE: strumento di programmazione incluso in python. Ha 2 strumenti:
- shell: strumento che traduce i linguaggi di python in linguaggio macchina. E può essere utilizzata in maniere interattiva. Cioè scrivo una cosa e la utilizzo/provo. Testo delle istruzioni. Ciò che scrivo nella shell è volatile
- Editor: per scrivere un programma vero e proprio e salvarlo come file.py Per una maggiore leggibilità del programma: può capitare che mentre scriviamo un programma sull’editor vogliamo andare a capo per avere una migliore leggibilità. Per fare questo è sufficiente inserire nel codice il carattere \ (backslash), nel punto in cui si desidera andare a capo. (Tutto questo senza influire minimamente sull’output del programma). Es: print(‘Mia sorella è fantastica’) Risultato: Mia sorella è fantastica. Concetti basilari: Indentazione: le rientranze e l’ordine delle istruzioni e delle funzioni in Python. Gestione degli spazi: qualcosa su cui Python non è rigido.ma è comunque preferibile usare gli spazi per una migliore leggibilità. Parole chiave: ogni parola ha una precisa funzione e significato (es: and, or, in, pass, True, while etc.) I numeri in Python: seguono la notazione anglosassone, ovvero utilizzano il punto come separatore dei decimali. Stringhe: raccolte tra apici (“” oppure ’’). Operatori che funzionano anche con le stringhe, ma cambiano significato:
- Operatore +, utilizzato sulle stringhe, esegue il concatenamento. Es: print(‘cassa’ + ‘forte’) cassaforte
- Operatore , utilizzato sulle stringhe, esegue la ripetizione. Es: print(‘Python’4) PythonPythonPythonPython Errori in Python: L’ultima riga del messaggio di errore indica che cos’è successo.
- errori di sintassi ( SyntaxError: invalid syntax ) per esempio non è corretto il numero delle parentesi o se abbiamo scritto il nome di una funzione sbagliato.
Se il risultato è positivo: gli vengono tolti semplicemente i decimali Se il risultato è negativo: viene arrotondato per difetto il risultato. 40%6 = 4 -> mi da il resto della divisione 40: Phyton segue delle priorità:
- Le operazioni racchiuse da parentesi
- Elevamento a potenza (**)
- Moltiplicazione e divisione (*,/,// e %)
- Addizione e sottrazione (+,-) (PEMDAS) Odine delle operazioni: Tutte le funzioni vengono eseguite da sinistra verso destra. L’elevamento a potenza viene eseguito da destra. es: 232 = mi fa prima 3^2 e poi 2^9 = Output dati: Funzione per formattare l’output in uscita: FUNZIONE FORMAT Format(value,’format_spec’ SEMPRE CON GLI APICI) Ci permette di formattare i numeri: Value = valore da formattare ‘format_spec’ = specificatore di formato = Quale formato vogliamo ottenere, scritto con un codice, il codice è una stringa di testo. .2 indica che si desidera arrotondare al secondo decimale f specifica che il numero che vogliamo ottenere è a virgola mobile (float) la “,” (virgola) aggiunge il separatore delle migliaia (es: ‘,.2f’) il simbolo % formatta in percentuale Es: format(1000/7, ’.2f’) ‘142.86’ il risultato mi viene riportato come una stringa di testo poiché è dento ad apici Quindi: se scrivo: print(format(1000/7, ‘.2f’)
In realtà è una questione di sola visualizzazione perché la funzione print produce un output classificato come “no type”. Il risultato di una funzione format è sempre una stringa di testo! (Non può essere utilizzato come numero). Se inserisco format all’interno di print mi viene senza virgolette, ma sarà sempre un testo. Con format posso anche ottenere un risultato con i separatori delle migliaia. Es: >>> print(format(10000/7, ',.2f')) 1,428. Con format posso anche ottenere un risultato in percentuale. Es: >>> print(format(10000/7, ',.2%')) 142,857.14% FUNZIONE PRINT print(value,…,sep=’ ‘, end=’\n’,)
Ciascun parametro, se si tratta di una stringe, deve essere incluso tra apici o virgolette. Es: print(‘pippo,pluto,paperino’)= pippo,pluto,paperino è diverso da print(‘pippo’,’pluto’,’paperino’)= pippo pluto paperino sep: indica ciò che divide i diversi value, il predefinito (cioè se non viene specificato) è lo spazio (sep=’ ‘). Il parametro sep va indicato, sempre dopo una virgola, alla fine dei parametri value (es: sep=’-‘) Operatori nei testi:
- = esegue il concatenamento ( ‘ta’+’ra’) = esegue la ripetizione (es: ‘ciao’3) Gestione degli spazi: è indifferente!! Funzioni (built-in) per i calcoli matematici: funzione sum: calcola la somma di un elenco di elementi indicati tra parentesi quadre o tonde separati da una virgola. Es: >>>sum([1,2,3,4,5]) 15 funzione pow: calcola l’elevamento a potenza di un numero. Es: >>>pow(2,5) 32 >>>2** 32 funzione abs: calcola il valore assoluto di un numero. Es: >>>abs(-5) 5 funzione round: arrotonda un numero in virgola mobile alla cifra decimale indicata come secondo parametro Es: >>>round(3.376,0)
>>>round(3.376,1)
funzione max e min: restituiscono il valore massimo e minimo di una serie di parametri singoli separati dalla vitìrgola o di una lista, tupla o stringa. Es: >>>max(10,20,30) 30 >>>max(“ciao”,”maddi”,”claudia”) ‘maddi’
Nel momento in cui io assegno un valore ad una variabile, faccio un’operazione di assegnazione. Ricordiamoci che la variabile assume l’ultimo valore che gli viene dato. Operazione di assegnazione (=) Es: cognome = ‘Rossi’ eta = 25 cognome ed eta sono i nomi delle variabili, rossi e 25 sono i valori che voglio assegnare a quelle variabili. Regole di nomenclatura delle variabili:
- Deve sempre iniziare o con una lettera o con un _
- Può contenere lettere , _ , numeri
- Non può contenere spazi o caratteri speciali (es: @,Y&,$ etc)
- Non possono essere nomi uguali alle parole chiave di Python (es: break non si usa, ma Break si può usare)
- Non si usano caratteri accentati Operazione di riassegnazione: Una variabile dopo che è stata inizializzata può essere riassegnata ad un altro valore,. Posso riassegnare una variabile anche ad un tipo di dato diverso, non cambia niente. Es: a= a= e ho riassegnato alla variabile a l’1 e poi l’ho riassegnata al valore 2. Per sapere tutto l’elenco di keywords di Python da non utilizzare come nomi delle variabili: help(‘keywords’) Per assegnare più variabili insieme: utilizzo la virgola: Es: a, b, c=1,2, Tipi di dati: Ogni dato che io uso corrisponde ad un insieme di dati e viene utilizzato da python a seconda del gruppo di cui fa parte: I dati basilari di python:
- Int = Intero (es: 112, 0 ,-12)
- Float = Reale (es: 2.44, -12.34)
- Bool = Booleano (es: True, False)
- Str = Stringa (es: ‘maddi’, ‘meli’) Per chiedere che tipo di dato sia: type(dato) Espressioni con tipi di dati misti: Quando si esegue un calcolo tra due operandi, il tipo di dati dipende dal tipo di dati degli operandi. In questi casi Python segue alcune regole specifiche:
- Quando i 2 operandi sono int: il risultato sarà int
- Quando i 2 operandi sono float: il risultato sarà float
- Quando un’operazione coinvolge un int e un float , il risultato sarà sempre un float Es: 10*2.0= 20. Per convertire un tipo di dato in un altro tipo di dato: Utilizzo le: FUNZIONI DI CONVERSIONE: (int, float, str) FUNZIONE INT: converte in numero intero (taglia però la parte decimale) FUNZIONE FLOAT: converte in numero a virgola mobile FUNZIONE STR: converte in stringa FUNZIONE INPUT: La funzione input chiede all’utente l’inserimento di un dato (un input, appunto) Una volta che l’utente ha digitato un valore e premuto il tasto Invio, legge il dato immesso da tastiera e restituisce questo dato al programma come stringa Può servire per assegnare un valore a una variabile Esempio: Per eseguire un programma che ho creato io: vado sul file, run, run module (oppure F5) Per aprire un programma salvato: tasto destro, edit with IDLE Per aggiungere un commento che servirà solo al programmatore e non comparirà mai nel programma: #commento random.random() -> genera dei numeri a caso in [0,1)
If condizione: blocco se la condizione è vera cosa fare. else: blocco di istruzione che dicono cosa fare se la condizione è falsa Es: x= int(input(‘Inserire il valore di x: ’) if x>0: print(‘x è positivo!’) else: print(‘x è negativo o pari a 0’) Condizioni nidificate: nidificare degli if dentro ad altri if come? Nidifichiamo il secondi, terzi… if dentro agli “else” DEVE ESSERE INDENTRATO=CON GLI SPAZI DAVANTI GIUSTI CORRETTAMENTE Come si fa? If condizione1: istruzioni else: if condizione2: istruzioni else: istruzioni SE HO L’ASTERISCO ALL’INIZIO DEL NOME DEL MIO FILE EDITOR, VUOL DIRE CHE NON È ANCORA STATO SALVATO. SALVALO SEMPRE. Per nidificare più casi utilizzo “elif”: Consente di specificare un blocco di istruzioni per ciascuno dei casi possibili diversi dall’if e, dopo una serie di elif, è possibile concludere la struttura decisionale con un’istruzione else, se vi sono casi residui. Come si fa? If condizione1: istruzioni elif condizione2: istruzioni .. elif condizioneN: istruzioni: Tutte le altre possibilità escluse da elif le risolvo con un else: else: istruzioni Condizioni multiple: Utilizzo gli operatori: (and,or,not) e li metto tra le condizioni: and -> Restituisce True se tutti gli argomenti sono veri, se no mi da False or -> Restituisce True se almeno uno degli argomenti è vero, se no è False not -> Restituisce True se l’argomento è falso, False se l’argomento è vero
Come si fa? If x>y and x>7: if x=y or x=3: if not(x>y): Operatore “in” che mi permette di specificare una lista di valori all’interno dei quali ci deve stare tutti quelli che mi vanno bene: Es: if temp in [“Sì”,”Si”,”sì”,”si’” ..etc] and time>=10: Funzione range: Permette di specificare un intervallo di valori interi come una lista (es: all’interno della lista del ciclo for). La funzione è composta così: range(start,stop [,step]): Start= numero di partenza (limite inferiore) ed è sempre incluso (se omesso=0) Stop= numero di fine (limite superiore) sempre escluso Step= è il passo intero da utilizzare tra un numero e l’altro nell’intervallo considerato (è quindi l’incremento o il decremento) (se è omesso è =1) Es: range(3)=range(stop)=0,1,2 NON 3!! PERCHE’ E’ ESCLUSO!! range(1,3)=range(start,stop)=1,2 NON 3!!! Range(0,5,2)=range(start,stop,step)=0,2, Es: utilizzata molto spesso negli if e nei cicli: a= if a in range(6,12) print(“Il valore è OK! “) else: print(“Il valore non appartiene all’intervallo”) >>> Il valore non appartiene all’intervallo (perché l’estremo sup è escluso) Costrutti iterativi (detti: cicli e in inglese loop ): L’iterazione= operazione di ripetizione di un blocco di istruzioni un tot di volte. 2 grandi categorie di cicli:
1. Se controllati da una condizione: viene rieseguita l’operazione fino a che la condizione viene soddisfatta (fino a che è vera). Se la condizione diventa falsa il ciclo si interrompe: ciclo “while” Come di fa? while condizione: (blocco di) istruzioni Es: x=1 (valore di partenza del ciclo. E’ fuori dal ciclo) while x<=10: print(x) (è cosa mi deve scrivere il ciclo, ovvero il valore che ho assegnato alla variabile iniziale) x=x+1 (è l’assegnazione del valore che x deve assumere nei cicli che vengono generati successivamente) print(‘fine’)
Come si fa? for variabile(contatore) in valore 1, valore 2,etc: istruzioni (al posto che [valore 1, valore 2,etc] può essere utilizzata range(valore 1,ecc): )
- Al contatore viene assegnato il primo valore della lista
- La lista: va specificata con l’ordine in cui vogliamo che escano i valori1,2 etc.
- Blocco di istruzioni che viene eseguito alla ripetizione di ogni ciclo.
- Il processo continua fino a quando alla variabile non viene assegnato l’ultimo valore della lista(= valore 1, valore 2 etc.) Es: for countdown in [5,4,3,2,1]: print(countdown) print(‘fine’) Risultato del ciclo: 5 4 3 2 1 fine Istruzione “pass”: Serve quando io inizio a scrivere un programma e voglio iniziare a testarlo senza terminare di scriverlo. Allora metto pass che mi evita che il programma mi vada in errore. Serve quindi come segnaposto senza andare in errore. Es: if x<0: pass Cicli nidificati: Es: for a in range(1,4): print('****',a) for b in range(3,0,-1): print(' ',b) print('fine') ESERCITAZIONE: import random random.randint: genera dei numeri casuali in un intervallo specificato. Per avere il segno di un numero invertito: Numero_invertito=-numero
LEZIONE 12:
Funzioni in Python:
- Funzioni built-in già presenti in Python (es: print, input, int, float)
- Funzioni importabili dalla libreria standard di Python (es: math e random)
- Funzioni personalizzate-> funzioni che creiamo noi e che possiamo utilizzare in un secondo momento Come costruire una funzione: Per creare una funzione personalizzata è necessario definirla, cioè scrivere una serie di righe di codice che spieghino a Python come si chiama e quali operazioni deve compiere. La sintassi generale: - def: serve per costruire una funzione personalizzata - nome_funzione: è il nome che noi vogliamo assegnare alla nostra funzione - (par1,par2…): i parametri sono gli input necessari per svolgere l’operazione richiesta - Blocco di istruzioni indentato=indentrato: sono le operazioni da eseguire con i nostri parametri. E vengono sempre eseguite in sequenza - Return (può anche non esserci): se c’è il valore fin calcolato dalla funzione viene memorizzato da qualche parte per riutilizzarlo (di solito memorizzato come variabile) Se non c’è, il valore finale non verrà memorizzato. Es: Funzioni produttive o vuote: produttive: hanno alla fine return vuote: non hanno alla fine return e quindi non tengono in memoria il risultato Nome_funzione deve: Il nome identifica in maniera univoca la funzione nel programma. Per assegnare il nome a una funzione si devono seguire alcune regole: il primo carattere deve essere una lettera o un underscore non si possono utilizzare parole chiave o spazi dopo la prima lettera si possono usare lettere (maiuscole o minuscole), numeri, underscore Python distingue tra maiuscole e minuscole (il nome “Funzione” è diverso da “funzione”) Parametri:
- Parametri obbligatori: Spiegano a Python che alla funzione, quando sarà chiamata, dovranno essere passati dei dati. È necessario specificare sempre prima tutti i parametri obbligatori seguiti
Es funzione Void: Risultato: Variabili locali e variabili globali: Globale= def in 1 programma e vale sempre dentro al programma Locali=Costruita in un costrutto (es: ciclo) ed esiste e funziona solo all’interno di quel costrutto Es con variabili locali: Es: variabile locale: In questo caso: w=globale e x,y=locali Stringa di documentazione:
- Posso scriverla come stringa di testo racchiusa tra triple virgolette o tripli apici, all’inizio del programma per “documentare un programma” , ovvero per spiegarlo e andare a capo sciallo senza “\” - Posso anche utilizzarla nelle funzioni per spiegare cosa fa quella funzione, quindi per aiutarci in seguito quando utilizziamo quella funzione. La stringa di documentazione viene definita includendo una stringa di testo su una o più righe racchiuse fra triple virgolette, come prima istruzione subito dopo l’intestazione nella definizione di una funzione. Es: def moltiplica(num1,num2,num3): “””Questa funzione mi moltiplica i num che io ho inserito.””” totale=num1num2num return totale Suggerimento: se poi faccio quindi help(funzione che ho descritto) mi viene fuori quello che ho scritto tra tre virgolette. Funzioni con cicli ed espressioni condizionali: Nel corpo delle funzioni è possibile utilizzare cicli ed espressioni condizionali per aumentare le possibilità di svolgere operazioni complesse.
Gestione delle eccezione=errori: Posso gestire in anticipo gli eventuali errori. 3 categorie di errore:
- di sintassi: di solito l’errore inizia con SyntaxError (es: non metto i 2 punti, non metto le parentesi etc.)
- di runtime: è un errore nel codice. Cioè quello che c’è nel codice non può funzionare (es: divisione per zero, oppure non ho nominato una variabile)
- semantici (poi): ho costruito male un programma. Cioè sintatticamente corretta ma mi da dei risultati sbagliati (es: ho scritto male una funzione) Cosa utilizziamo per gestire i primi 2 tipi di errore? 2 istruzioni “try…except”: E’ come il SE.ERRORE: ma mi permette anche di differenziare i vari tipi di errori Es: Try: metto che cosa devo fare normalmente except: metto cosa fare nel caso di errore posso mettere anche più except. Quando voglio evitare un tipo specifico di errore posso utilizzare il nome dell’errore accanto accanto ad “except”. Nome degli errori: AttributeError -> quando un metodo o un attributo sono assegnati a un oggetto o a un tipo di dato sbagliato. Questo accade quando per esempio si cerca di utilizzare il metodo delle stringhe upper() con una variabile che contiene un valore numerico. IndexError -> quando per accedere a una stringa, una lista o una tupla si utilizza un indice maggiore della lunghezza meno uno. NameError -> quando una variabile non viene trovata a livello locale o globale SyntaxError -> quando viene trovato un errore di sintassi nella scrittura del codice TypeError -> quando un’operazione o una funzione sono applicate a un tipo di dato sbagliato. Questo avviene per esempio quando si cerca di dividere una tringa di testo per un numero, oppure quando si cerca di indicizzare una lista con indici diversi dai numeri interi. ValueError -> quando una funzione o un metodo riceve un argomento del tipo di dato corretto ma con un valore che non è valido. Questo accade per esempio quando si cerca di applicare la funzione int a una stringa. Se la stringa è “22” viene convertita correttamente in un numero intero, mentre se la stringa è “gatto” viene sollevato questo errore. Quindi ha un valore non valido ZeroDivisionError -> quando il dividendo di una divisione è uguale a 0
istanze delle classi sono oggetti di classi che hanno quindi delle capacità in base alla classe di cui fanno parte. Metodi=azioni che gli oggetti possono compiere Metodo: nome.nomemetodo(qualcosa) per velocizzare la cosa tarta.speed(velocità) pippo.pencolor(“red”)
LEZIONE 13:
Sequenze: Oggetti che possono contenere diversi dati, memorizzati uno dopo l’altro. Le sequenze principali sono:
- Le stringhe
- Le liste
- Le tuple Le sequenze possono essere: - Mutabili= il suo contenuto può essere modificato in qualsiasi momento. (Liste) - Immutabili= il suo contenuto non può essere modificato dopo che è stata creata. (Stringhe e Tuple) Tutte le sequenze condividono l’uso di numerose funzioni, metodi e operazioni. Stringhe: - Una stringa è una sequenza di caratteri. - Può contenere caratteri alfanumerici o simbolici - Le stringhe devono essere raccolte tra virgolette o apostrofi e per memorizzarle bisogna assegnargli il nome di una variabile (es: città=”Milano”) - Sono immutabili. Per modificarne il contenuto è necessario assegnare una nuova stringa alla variabile in cui è stata memorizzata. città=”Milano” città=”Londra” Operazioni con le stringhe: Operatore +: consente di concatenare due stringhe (senza avere lo spazio). Es: testo=”buon”+”giorno” print(testo) >>>buongiorno Es2 con lo stesso risultato: testo1=”buon” testo2=”giorno” testo3= testo1 + testo 2 print(testo3) >>>buongiorno Print(testo1+testo2) >>>buongiorno Va ricordato che l’operatore + non può concatenare tipi di dato differenti, al che sarà quindi necessario utilizzare str, float etc! Es: x=”Mario” y= print(x+y) è sbagliato! Per farlo giusto: y=str(10)