






















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
Una panoramica sulla sintassi delle funzioni in python, coprendo librerie predefinite, standard e addizionali. Esplora l'importazione di moduli, operazioni matematiche, funzioni del modulo math, conversione da virgola mobile a intero, stringhe, sequenze di escape e cicli. Approfondisce l'uso di liste, tabelle, insiemi e la definizione di funzioni, inclusi l'ambito di visibilità delle variabili e le tecniche di collaudo. Un'utile guida per comprendere e applicare le funzioni in python.
Tipologia: Appunti
1 / 30
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!























Processo di programmazione La programmazione L’informatica è la scienza che si occupa dello studio della rappresentazione e manipolazione dell’informazione, in particolare di quella digitale, in cui tutto diventa “bit”, ovvero una cifra binaria, ovvero uno dei due simboli del sistema numerico binario: 0, 1.
Un calcolatore elettronico è composto da due parti: hardware e software. Hardware Comprende gli elementi fisici di un sistema di elaborazione e comprende:
Python è un linguaggio progettato da Guido van Rossum per avere un linguaggio che permettesse di creare rapidamente i programmi e modificarli in modo semplice, con una sintassi più pulita degli altri linguaggi come Java, C, C++. I programmi Python sono eseguiti dall’interprete Python. Si può creare un programma:
Il compilatore legge il programma e genera le istruzioni binarie, byte code, semplici istruzioni per la Macchina Virtuale Python, un programma che si comporta come la CPU del computer (esegue istruzioni in software). Ogni libreria necessaria (es. la grafica) viene automaticamente trovata ed inclusa dalla macchina virtuale.
Per usare una funzione in Python occorre specificare il nome della funzione che vogliamo usare, tutti i valori (argomenti, parametri) racchiusi tra parentesi tonde di cui la funzione ha bisogno per svolgere il proprio compito. Se ci sono più argomenti, separarli con le virgole e lo spazio. Stringhe : sequenza di caratteri racchiusa tra apici (‘ciao’) o virgolette (“ciao”)
Una variabile è una zona di memoria dotata di un nome in un programma che fa riferimento ad un valore specifico e si definisce dicendo all’interprete il nome scelto e il valore iniziale, assegnato tramite l’istruzione di assegnazione (=), che non rappresenta un confronto (==). È importante che una variabile, prima di essere utilizzata, debba essere definita sopra la linea di codice dove la si usa per la prima volta, altrimenti il sistema darà errore. Il nome scelto può apparire sia a sinistra e sia a destra del segno =, e avrà come valore, l’ultimo assegnato. Esempio: lattine = 4 #attualmente le lattine sono 4 lattine = lattine + 2 #da questa riga in poi le lattine saranno 6 Abbiamo visto tre diversi tipi di dato, associato al valore, non alla variabile, infatti:
Le costanti sono variabili che non andrebbero modificate. Per convenzione, si indicano con caratteri maiuscoli (es. PIGRECO), Python permette comunque di modificarle e sono molto utili perché piuttosto che inserire in un’operazione un numero, mettendo la costante, si riconosce subito il motivo del calcolo.
Python supporta tutte le operazioni aritmetiche elementari. Si possono utilizzare le parentesi per scrivere le espressioni e la precedenza delle operazioni è simile a quella algebrica. Inoltre, se viene diviso un #int e un #float, il risultato sarà un #float. Se si dividono due #int, il risultato sarà un #float. Con la divisione intera viene ignorata la parte frazionaria, dando solo quella intera arrotondata per difetto. Se si è interessati al resto, si utilizza %, talvolta detto modulo. Consigli per utilizzare la divisione intera e il resto Espressione (n = 1729) Valore Commento n % 10 9 Per qualsiasi numero intero positivo n, n % 10 è l’ultima cifra di n n // 10 172 Questo è n senza la sua ultima cifra n % 100 29 Le ultime due cifre di n n % 2 1 Se vale 0, n è pari, se vale 1 n è dispari
Una libreria è una raccolta di un codice (funzioni, costanti, tipi di dato), scritto e compilato da terzi. Distinguiamo diverse tipologie di librerie:
Se volessimo estrarre una porzione di una stringa , allora utilizzeremo la funzione nome[x : y], dove x è incluso e y è escluso, quindi prenderà i caratteri dall’indice x fino a y-1. Analizziamo adesso casi particolari: nome[ : 6] Prenderà la porzione dal carattere 0, cioè dal primo, al carattere 5 nome[6 : ] Prenderà la porzione dal carattere 6 al carattere len(nome) – 1, cioè all’ultimo nome[ : ] Prenderà tutti i caratteri, dal primo all’ultimo Nelle porzioni è possibile indicare un terzo argomento, con struttura: stringa[ start : stop : step] Es. nome[2 : 8 : 2] significa che restituisce i valori da 2 a 8 ogni 2, quindi i caratteri 2, 4, 6. nome[ : : 2] Restituisce tutti i caratteri di indice pari nome[1 : : 2] Restituisce tutti i caratteri di indice dispari Se lo step è negativo, allora utilizzo un intero negativo, ovviamente col primo termine più grande del secondo. Es. nome[9 : 3 : - 1], oppure per avere tutta la stringa in ordine inverso nome[ : : - 1].
I caratteri sono memorizzato come valori interi e Python utilizza i caratteri Unicode. Questi caratteri sono racchiusi del subset ASCII nella tabella Unicode, che contiene oltre 100,000 caratteri. Possiamo passare dal carattere al valore unicode e viceversa:
Python è un linguaggio orientato agli oggetti ( object-oriented ), quindi tutti i valori sono oggetti. Ogni oggetto può avere metodi, cioè funzioni che possono essere chiamate su quegli oggetti specifici, usando la sintassi object.method(). Esempi: name = “Giacomo” uppercaseName = name.upper() #portando tutti i caratteri maiuscoli lowercaseName = name.lower() #portando tutti i caratteri minuscoli Mentre le funzioni sono generali e possono accettare argomenti di diverso tipo, i metodi sono specifici per diversi tipi di oggetti. Le funzioni sono chiamate direttamente, con un elenco di parametri, mentre i metodi sono chiamati con la notazione del punto. Entrambi restituiscono un risultato che può essere salvato in una variabile. Esempio: se volessi applicare una funzione o un metodo alla variabile a, bisogna scrivere:
Come visualizzare le virgolette? print(“Ha detto \”ciao\””) Come visualizzare il backslash ( \ )? print(“C:\Temp\Secret.txt”) Caratteri speciali nelle stringe, come andare a capo: print(“\n\n**”)
È possibile leggere una stringa dalla console con la funzione input(“…”). Se serve un input numerico, si deve convertire la stringa in un number, o facendo due righe di codice inserendo prima la stringa e poi la conversione della variabile da stringa a numero con int() o float() oppure in una singola riga combinando int(input(“…”)) oppure float(input(“…”)).
Talvolta è opportuno inserire dei valori numerici in stringhe di testo in modo da ottenere un output più chiaro e ordinato da visualizzare. Per fare ciò possiamo utilizzare varie metodologie, vediamo le applicazioni.
F-strings Strings precedute da una f o una F, in cui possiamo inserire delle variabili dentro {}. Mentre le classiche stringhe hanno normalmente un valore costante, le f- strings sono praticamente espressioni valutate al momento dell’esecuzione. All’interno delle {} posso inserire:
In un programma è spesso necessario prendere delle decisioni in base al valore di ingresso o di variabili interne. Questa istruzione deve essere eseguita con la sintassi: if
Illuminismo: Boole cercò di razionalizzare ogni cosa della quotidianità con linguaggio logico-matematico, basato esclusivamente su enunciati che potevano essere veri o falsi. In Python, il tipo di dato bool può avere solo due valori: True / False (infatti if è un valore Booleano) ed è spesso utilizzata come flag (indicatore). Operatori Booleani principali: and, or, not, usati per combinare diverse condizioni Booleane:
Se volessi sapere se una stringa contiene al suo interno una certa sottostringa, possiamo utilizzare l’op in. name = “John Wayne” “Way” in name Ritorna VERO perché la sottostringa “Way” appare all’interno della variabile stringa name. Operazioni per analizzare sottostringhe Operazione Descrizione sottostringa in s True se la stringa s contiene sottostringa, altrimenti False s.count (sottostringa) Restituisce il numero di ricorrenze non sovrapposte di sottostringa in s s.endwith(sottostringa) True se la stringa s finisce con sottostringa, altrimenti False s.find(sottostinga) Valore più basso in cui ricorre sottostringa in s, altrimenti restituisce - 1 s.startwith(sottostringa) True se la stringa s inizia con sottostringa, altrimenti False Metodi per testare le caratteristiche di una stringa Metodo Descrizione s.isalnum() True se la stringa s contiene almeno un carattere e solo lettere o cifre, else: False s.isalpha() True se la stringa s contiene almeno un carattere e solo lettere, else: False s.isdigit() True se la stringa s contiene almeno un carattere e solo cifre, else: False s.islower() True se la stringa s contiene almeno una lettera e tutte le lettere sono minuscole, else: False s.isspace() True se la stringa s contiene almeno un carattere e ha solo spazi (tab, newline), else: False s.isupper() True se la stringa s contiene almeno una lettera e tutte le lettere sono maiuscole, else: False
Il confronto, l’analisi di stringhe è utile a circoscrivere il campo di esistenza dei valori di input. Non bisogna mai fidarsi dell’input dell’utente, ovvero non assumere mai che quello che viene dato in input sia corretto o accettabile; quindi, è spesso necessario porre dei limiti, inserendo delle condizioni in cui il programma metta in output informazioni del tipo “Valore non accettabile” oppure “Riprova” ecc.
Cicli
I cicli sono utilizzati per ripetere diverse volte lo stesso blocco di istruzioni con valori diversi dalle variabili, fino a che una condizione di ingresso non diventa falsa, caso in cui si esce dal ciclo e si procede con le iterazioni successive. A fianco possiamo osservare un ciclo while in flowchart, in cui possiamo vederne gli elementi. Distinguiamo diversi tipi di cicli:
Non sempre i cicli sono controllati da un solo contatore o da un evento, anzi spesso può capitare di dover combinare più condizioni. Per gestire questo mix di condizioni potrebbe essere utile definire una variabile booleana che inizialmente è vera, ma che poi diventa falsa nel caso si verificasse una condizione in un if all’interno del ciclo. Vediamo un esempio: Interruzione anticipata di un ciclo
Sono valori particolari che vengono usati per indicare un particolare evento. Vengono utilizzati principalmente per circoscrivere un insieme di valori validi per l’input. Alcuni programmatori non amano inizializzare la variabile di input ad un valore diverso dalla sentinella, ma preferiscono precaricare la variabile con una lettura iniziale fuori dal ciclo. Quindi invece di porre prima del ciclo a = 0, inserire direttamente l’input a = input(“Inserire:”), anche per avere comunque un valore iniziale valido e inserito dall’utente, non stabilito dal programmatore. Per permettere all’utente di inserire altri dati e far continuare il ciclo, si mette alla fine un altro input. Quindi se nel while la variabile è a, alla fine del ciclo bisogna inserire a = input(“Inserire:”).
Fino a ora abbiamo analizzato due modi per utilizzare il for: uno consiste nel ciclare tutti gli elementi di un insieme, accedendo direttamente a ogni iterazione all’elemento da analizzare, il secondo consiste in un ciclo basato sull’indice, che poi verrà usato per accedere all’elemento che mi serve. Queste due soluzioni sono alternative e ottengono lo stesso risultato, però ci sono delle situazioni in cui può essere utile avere nello stesso momento entrambe le informazioni (elemento da elaborare e la sua posizione nell’insieme = indice). Per le conoscenze attuali, dovremmo usare delle variabili aggiuntive, ad esempio se gestisco il ciclo tramite l’indice, devo poi salvarmi l’elemento in una variabile. Viceversa, se ciclo sugli elementi, devo generare una variabile che indica il valore dell’indice corrente. Soluzioni fattibili ma scomode. Per risolvere questo problema posso utilizzare la funzione enumerate e si applica a tutti gli insiemi enumerabili. La funzione ritorna ad ogni iterazione due informazioni: indice dell’elemento e l’elemento stesso (questo dato è chiamato tupla). Struttura : for (indice, lettera) in enumerate(insieme). Esempio: nome = “Paolo” for (i, lettera) in enumerate(nome): print(i, lettera) Questo codice stamperà sia la posizione della lettera, sia la lettera corrispondente. Infatti, la funzione enumerate trasforma un contenitore in una sequenza di coppie, in questo caso: 0 P, 1 a, 2 o, 3 l, 4 o.
Come abbiamo fatto con gli if, possiamo annidare anche un ciclo all’interno di un altro. Può rivelarsi utile quando vogliamo analizzare delle celle di una tabella, in cui il ciclo più esterno itera sulle righe della tabella e il ciclo più interno processa le colonne nella riga corrente. A fianco possiamo vedere il diagramma di flusso. Se volessimo stampare una tabella, dovremmo prima stampare l’header, in cui ci sono i parametri generali (con le variabili) e poi, andando ogni volta a capo, inserire i dati sostituendo i numeri alla variabile. Scrivendo quindi riga per riga quante volte quante sono le colonne. Si presenta però un problema: come stampare un singolo valore con la print senza andare a capo? Questa funzione usa un formalismo chiamato named arguments, che permette di indicare in chiamata i parametri esplicitamente per nome. Questi parametri sono:
I numeri casuali risultano spesso utili, soprattutto nei giochi, come il lancio di dati, girare una ruota, estrarre una carta. Ma come fare a generare dei numeri casuali? Python mette a disposizione un generatore di numeri casuali che produce numeri che sembrano casuali, ma che in realtà sono estratti da una sequenza di numeri non consecutivi che non si ripetono. Questo generatore si trova nel modulo random che contiene appunto la funzione random. QUINDI prima di utilizzarla, assicurarsi di aver importato un modulo! Un’altra funzione è randint (a,b) che dà numeri interi casuali dal numero a al numero b inclusi.
Il metodo Monte Carlo Metodo statistico che prende il nome dai casinò di Monte Carlo, con alla base l’idea di trovare delle soluzioni approssimate a dei problemi complessi, che sono molto difficili da calcolare in maniera esatta, facendo un campionamento casuale di un determinato fenomeno e poi mettere insieme le informazioni che ho ottenuto per arrivare a una mia soluzione. Un’applicazione è proprio il calcolo del 𝜋. Se mettessimo in relazione un cerchio e il quadrato circoscritto, con i dovuti calcoli ci accorgiamo che il rapporto tra l’area del quadrato e l’area del cerchio è 𝜋 4
. Il concetto base è di generare quanti più punti possibili. Quanti di questi cadono sia sul cerchio che sul quadrato, e quanti solo nel quadrato? Facendo il rapporto tra il numero dei punti, otteniamo in maniera approssimata 𝜋 4 e moltiplicando per 4 avremo quindi con buona approssimazione il valore di 𝜋. Funzioni Una funzione è una sequenza di istruzioni a cui viene dato un nome. Per essere utilizzata è necessario invocarla/chiamarla, essa eseguirà varie operazioni e quando terminerà, restituirà un risultato. Dopo che il valore è stato utilizzato, il programma riprende l’esecuzione. Se si vuole eseguire una funzione su una o più variabili, queste devono essere inserite ( input ) all’interno delle parentesi dopo la funzione (è comunque possibile avere funzioni senza argomenti). Alla fine, la funzione restituirà in output uno o più valori (lista o tupla), anche se ci sono alcune funzioni che non restituiscono valori. Le funzioni sono come scatole nere : si passa alla funzione ciò che le serve per eseguire il suo compito e si ottiene il risultato, quando c’è. Ci sono diverse funzioni all’interno di Python, ma dietro queste funzioni ci sono diverse operazioni che il calcolatore esegue, ma che l’utilizzatore non vede, poiché a lui interessa solo sapere come usare la funzione, ad esempio la funzione round ha delle sotto-operazioni, ma l’utilizzatore non le conosce, lui sa solo che se mette la variabile float x e un numero int n, la funzione restituirà il numero x arrotondato a n cifre decimali. Dove trovare la libreria delle funzioni? Come già detto, ci sono delle funzioni predefinite nella libreria standard (round è una di queste), in cui ci sono più di 200 moduli con varie funzioni ciascuno. Tra i moduli più interessanti ci sono string, math, random, statistics, os.path, csv, json ecc. RICORDA: per importare il modulo ‘import modulo’, o ‘from modulo import funzione’ o ‘from modulo import *’
Per definire una funzione, bisogna:
In Python i dati passati ad una funzione sono indicati da un nome nella definizione di funzione. I parametri si possono usare poi in chiamata in due modi (esempi con la funzione complex (real, imag):
Le funzioni possono (opzionalmente) restituire un valore. Per fare ciò utilizziamo la funzione return , che:
Se non serve restituire alcun valore, la funzione termina senza trasmettere un valore. Se l’enunciato return non viene incontrato durante l’esecuzione della funzione, è equivalente ad avere un return vuoto dopo l’ultima istruzione. Infatti, le funzioni non sono obbligate a restituire un valore; inoltre, non è richiesta alcun’istruzione return e la funzione può dare comunque un output se inseriamo ad esempio dei print. ATTENZIONE: si può utilizzare return senza un valore, ma in quel caso la funzione terminerà e tutto ciò che c’è, indentato nella funzione, dopo la riga di codice del return, non verrà mai letto dall’interprete.
L’ambito di visibilità di una variabile è la porzione del programma dove essa è visibile Le variabili possono essere dichiarate:
Per risolvere un problema complesso, esso va scomposto in problemi più semplici, fino a quando non si ottengono problemi che si sappiano risolvere. Dopo aver scomposto il problema, probabilmente tramite flowchart, dovremmo scrivere lo pseudocodice per capire effettivamente quali operazioni deve eseguire il calcolatore. Possiamo adesso scrivere il codice definendo innanzitutto delle funzioni che mi permettano di risolvere ogni sotto-problema. Suggerimenti:
A differenza che in altri linguaggi, Python permette agli indici negativi di accedere alla lista, quindi se ci interessa ad esempio l’ultimo elemento, possiamo utilizzare l’indice - 1. Vediamo un esempio a fianco.
Un modo per ordinare una lista è attraverso ripetuti scambi di elementi che non sono in ordine. L’operazione fondamentale è scambiare gli elementi in posizioni i e j di una lista di valori. È necessario copiare in values[i] il valore values[j], ma questo sovrascriverebbe il valore precedente di values[i], quindi bisognerà salvarlo in una variabile. values = [1, 2, 3, 4] #inizializzo la lista temp = values[i] #salvo il vecchio values[i] in una variabile values[i] = values[j] #cambio il valore di values[i] in values[j] values[j] = temp #cambio il valore values[j] col vecchio valore values[i] salvato in temp
È possibile leggere l’input da un utente e raccoglierli in una lista per poi elaborarli:
Una funzione può accettare una lista come argomento e può essere modificata. Se ad esempio volessimo moltiplicare ogni elemento di una lista per un fattore, potremmo scrivere un algoritmo del genere. Una funzione può generare una lista anche tramite operazioni. Ad esempio, possiamo definire una funzione squares(n) che restituisce i quadrati nei numeri da 0 a n-1.
Una tupla è simile a una lista, ma una volta creata, il suo contenuto non può essere modificato; quindi, una tupla è una versione immutabile di una lista. Una tupla viene creata specificando il suo contenuto in una sequenza separata di virgole e inserita all’interno delle parentesi tonde (a differenza delle liste, che richiedono parentesi quadre). In realtà è possibile omettere le parentesi tonde, ma per maggior chiarezza del codice, è consigliabile usare le parentesi. Abbiamo già visto le tuple in passato, nella funzione enumerate (stringa / lista), usata nel ciclo for per iterare sia sull’indice che sull’elemento. Come per le liste, anche qui valgono le funzioni di accesso agli elementi con tupla [i], di concatenazione con operatore + , di len (tupla), sum (tupla), max (tupla), di iterazione sugli elementi con for, di verifica dell’appartenenza di elementi nella tupla con in e not in. In Python (solo in Python) si possono assegnare variabili multiple in una sola operazione e questo risulta utile, ad esempio, nello scambio di variabili. Ciò ci permette di evitare di salvare gli elementi in variabili, come abbiamo visto in precedenza. È possibile usare tuple per la restituzione di valori multipli da parte di una funzione: