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


Riassunto linguaggio Python, Appunti di Elementi di Informatica

Comandi di Python per esame di informatica, scienze statistiche

Tipologia: Appunti

2018/2019
In offerta
30 Punti
Discount

Offerta a tempo limitato


Caricato il 18/12/2019

alessio-ciarmatori
alessio-ciarmatori 🇮🇹

3.4

(5)

2 documenti

1 / 12

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
LEZIONE 1 INFORMATICA
Con Python è possibile scrivere funzioni. La struttura è la seguente:
def nome_funzione(parametro1,parametro2):
istruzione1
istruzione2
return espressione per calcolare nome_funzione
print(nome_funzione(effettivo1,effettivo2))
dove parametro1 e parametro2 sono detti "parametri formali" e effettivo1 e
effettivo2 sono detti "parametri effettivi"
Il nome delle variabili e delle funzioni non può iniziare con un numero e non
può contenere nomi di comandi come ad esempio "print"
es.
def area_cilindro(raggio,altezza):
pigreco = 3,14159
area_base = pigreco * raggio ** 2
circonferenza = pigreco * raggio * 2
return 2 * area_base + circonferenza * altezza
print(area_cilindro(5,10))
Per importare da un modulo una precisa funzione si usa il comando from modulo
import funzione
es. from math import math.log
Per avere un elenco delle funzioni di un modulo si usa il comando dir(modulo)
es. dir(math)
Nel caso in cui non si sappia come funziona un comando, è possibile scoprilo con
il comando help
es. help(area_cilindro) solo dopo aver importato quella funzione
LEZIONE 2 INFORMATICA
Comando "type" permette di vedere il tipo di valore scritto tra parentesi
Gli errori che riguardano il type prendono il nome di TypeError
Numeri interi e interi relativi hanno tipo "int"
Numeri con virgola mobile (floating point) hanno tipo "float"
Le stringhe di testo hanno tipo "str"
I numeri con virgola mobile se con troppe cifre vengono scritti con la notazione
esponenziale NeE
Python supporta tutte le operazioni di base + - *
Con Python è possibile convertire i numeri interi in numeri float con il comando
float(number)
Con Python è possibile svolgere anche l'operazione inversa con il comando
int(number) che eliminerà tutti i decimali del numero float
Per la divisione distinguiamo 3 tipi di divisione:
la divisione intera che si svolge con //
il resto che si svolge con % (il resto è sempre positivo vd appunti)
la divisione reale che si svolge con /
La divisione per 0 darà un errore del tipo ZeroDivisionError
E' possibile eseguire l'elevamento a potenza con **
Per quanto riguarda la precedenza degli operatori:
** ha associatività a destra
le divisioni hanno associatività a sinistra
+ e - si comportano come operatori algebrici
pf3
pf4
pf5
pf8
pf9
pfa
Discount

In offerta

Anteprima parziale del testo

Scarica Riassunto linguaggio Python e più Appunti in PDF di Elementi di Informatica solo su Docsity!

LEZIONE 1 INFORMATICA

Con Python è possibile scrivere funzioni. La struttura è la seguente: def nome_funzione(parametro1,parametro2): istruzione istruzione return espressione per calcolare nome_funzione print(nome_funzione(effettivo1,effettivo2)) dove parametro1 e parametro2 sono detti "parametri formali" e effettivo1 e effettivo2 sono detti "parametri effettivi" Il nome delle variabili e delle funzioni non può iniziare con un numero e non può contenere nomi di comandi come ad esempio "print" es. def area_cilindro(raggio,altezza): pigreco = 3, area_base = pigreco * raggio ** 2 circonferenza = pigreco * raggio * 2 return 2 * area_base + circonferenza * altezza print(area_cilindro(5,10)) Per importare da un modulo una precisa funzione si usa il comando from modulo import funzione es. from math import math.log Per avere un elenco delle funzioni di un modulo si usa il comando dir(modulo) es. dir(math) Nel caso in cui non si sappia come funziona un comando, è possibile scoprilo con il comando help es. help(area_cilindro) solo dopo aver importato quella funzione LEZIONE 2 INFORMATICA Comando "type" permette di vedere il tipo di valore scritto tra parentesi Gli errori che riguardano il type prendono il nome di TypeError Numeri interi e interi relativi hanno tipo "int" Numeri con virgola mobile (floating point) hanno tipo "float" Le stringhe di testo hanno tipo "str" I numeri con virgola mobile se con troppe cifre vengono scritti con la notazione esponenziale NeE Python supporta tutte le operazioni di base + - * Con Python è possibile convertire i numeri interi in numeri float con il comando float(number) Con Python è possibile svolgere anche l'operazione inversa con il comando int(number) che eliminerà tutti i decimali del numero float Per la divisione distinguiamo 3 tipi di divisione: la divisione intera che si svolge con // il resto che si svolge con % (il resto è sempre positivo vd appunti) la divisione reale che si svolge con / La divisione per 0 darà un errore del tipo ZeroDivisionError E' possibile eseguire l'elevamento a potenza con ** Per quanto riguarda la precedenza degli operatori: ** ha associatività a destra le divisioni hanno associatività a sinistra

  • e - si comportano come operatori algebrici

E' possibile importare dei moduli fra cui il modulo matematico, con il comando import es: per il modulo matematico import math con questo modulo è possibile eseguere seno,coseno,logaritmo e numero di Nepero per usare il logaritmo con base a scelta bisogna scrivere ad esempio log2(4) dove 2 è la base, mentre 4 è l'argomento Attenzione! Non sarà possibile eseguire nessuna di queste operazioni finchè non verrà importato il modulo matematico Fra gli altri comandi per arrotondare troviamo: round(number) che arrotonda il numero all'intero più vicino in base alla cifra del decimale (se il decimale è 5 l'arrotondamento è per eccesso) math.floor(number) che arrotonda il numero all'intero minore più vicino. math.ceil(number) che arrotonda il numero all'intero maggiore più vicino. Su Python è possibile inoltre scrivere dei commenti inserendo il cancelletto #. Essi servono ad aumentare la leggibilità e non influiscono sul codice Le variabili sono utili per associare un nome ad un espressione con il simbolo =. es. nome_variabile=espressione Il valore, dunque anche il tipo, della variabile può variare nel tempo. La variabile può essere riutilizzata o distrutta. Se viene usata una variabile non definita Python darà un errore del tipo NameError. Con Python è possibile scrivere delle stringhe di testo con il comando print("stringa"). La stringa deve essere delimitata da apici singoli o doppi (') (") E' possibile usare apici singoli in stringhe delimitate da apici doppi e viceversa. es. 'stringa con "apici doppi" all'interno' Vi sono poi delle sequenze dette "sequenze escape" che permettono di scrivere caratteri speciali fra cui: \n a capo \t spazio ' apice singolo " apice doppio \ back slash () es. print("Buon\tgiorno") ----> Buon giorno Con Python è possibile svolgere delle operazioni con le stringhe del tipo: es. print("Giorgio" + "Rossi") ----> Giorgio Rossi es. print("tic tac" * 2) ----> tic tac tic tac E' possibile convertire i numeri in stringhe con il comando str(number) Gli errori di conversione vengono segnalati come ValueError Con il comando print è possibile stampare più cose nella stessa istruzione es. print("ciao",5,4.3) LEZIONE 3 INFORMATICA Nel codice della funzione è possibile scrivere una docstring, ovvero del testo che compare se viene richiesto l'help per quella funzione, che è possibile scrivere usando 3 apici (sia singoli che doppi) es. """funzione utile per trovare le soluzioni per un'equazione di secondo grado conoscendo i coefficienti""" In genere la docstring spiega i parametri usati, ciò che il programma

Attenzione! L'operatore = assegna dei valori a dei nomi, mentre l'operatore == determina se due valori sono uguali. In Python è possibile scrivere catene di confronti del tipo: a1 op1 a2 op2 a3 che coincide con a1 op a2 and a2 op2 a dove a è il valore e op è l'operatore logico es. 7<N<10 è uguale a 7<N and N< E' possibile anche confrontare le stringhe. Le stringhe sono ordinate secondo l'ordinamento lessico-grafico, ovvero: 0 < 9 < A < Z < a < z Se nella prima posizione in cui differiscono il carattere di stringa1 è più piccolo del carattere di stringa2 allora stringa1 < stringa Quindi ad esempio: print(Mario > Bruno) ----> True Inoltre se stringa1 è un prefisso di stringa2 allora stringa1 < stringa Quindi ad esempio: print(Mar < Mario) ----> True Inoltre per vedere se una stringa è compresa in un altra uso l'operatore in, il cui opposto è not in es. espressione="Che bel tempo!" print("bel" in espressione) ----> True print("che" in espressione) ----> False print("ciao" not in espressione) ----> True E' possibile convertire un valore in booleano usando il comando bool(x), dove x è il valore. LA LOGICA BOOLEANA Deriva da George Boole, uno dei fondatori della logica matematica Il comando not è detto operatore di negazione logica, poichè nega un valore booleano. Se x è True, not x è False e viceversa. Il comando and è detto operatore di congiunzione logica. La congiunzione logica è vera quando entrambi i valori sono veri. Infatti a1 and a2 and a3 and a4 è vera solo se a1,a2,a3,a4 sono vere, se anche solo una di esse fosse falsa allora la congiunzione sarebbe falsa. Il comando or è detto operatore di disgiunzione logica. La disgiunzione logica è vera se almeno uno dei valori è vero o se tutti sono veri. La disgiunzione logica è falsa solo se tutti i valori sono falsi. Infatti a1 or a2 or a3 è vera se o a1 o a2 o a3 o due di loro o tutti e tre sono veri. Un operatore è detto: associativo quando (a1 op a2) op a3 = a1 op (a2 op a3) commutativo quando a1 op a2 = a2 op a L'operatore XOR, detto or esclusivo e indicato con l'accento circonflesso (^), è vero se esattamente uno dei valori è vero. Nel caso di più valori lo XOR è vero se i valori veri sono in numero dispari Infatti a1 ^ a2 ^ a3 è vero se o uno o tutti e tre quei valori sono veri. Lo XOR è definibile anche come: def exclusive_or(x,y): return not x and y or x and not y

print(exclusive_or(False,False)) print(exclusive_or(True,False)) print(exclusive_or(False,True)) print(exclusive_or(True,True)) Per quanto riguarda la precedenza tra operatori logici, not precede and, che precede or Secondo la regola di De Morgan: not (x or y) = not x and not y not (x and y) = not x or not y Usando la proprietà della distributività: x and (y or z) = x and y or x and z x or (y and z) = x or y and x or z LEZIONE 4 INFORMATICA IL VALORE NONE Il valore None indica un valore non definito o indefinito. La sua classe è Nonetype. E' possibile associare una variabile definita a None. es. esmpio = None None è utile per rappresentare dati incompleti, espressioni non ancora calcolate o espressioni che non si possono calcolare, dunque dati mancanti. Per testare se una variabile è None o meno si usa il comando: if variabile is None if variabile is not None che danno come risposta un valore booleano None è dato come risposta quando in una funzione: C'è il comando return ma non c'è espressione Viene letta tutta la funzione e non viene restituito alcun valore INDENTAZIONE L'indentazione permette di aumentare la leggibilità del codice, identificando i blocchi logici a uno a uno Una sbagliata indentazione può causare IndentationError E' conveniente usare, invece del Tab, 4 spazi per distanziare un blocco di codice l'uno dall'altro, perchè in Python non si possono mischiare spazi e Tab e i Tab vengono letti in modo diverso da editor di testo diversi La lunghezza dell'indentazione è facoltativa, ma è consigliabile usare 4 spazi INTERMEZZO DI VALORI La funzione può restituire più valori se inserisco più espressioni dopo il comando return: es. return expr1, expr2, expr PRECEDENZE DI OPERATORI -elevamento a potenza **, associato a destra -segni + e - dei numeri -le divisioni -le altre operazioni in ordine: * + - -in, not in, is, is not, <, >, <=, >=, ==, != hanno stessa precedenza, da sinistra a destra -not prima di and prima di or MODULI Un qualsiasi file python è un modulo contenente funzioni e/o variabili che possono essere importati con: es. import modulo oppure from modulo import funzione/variabile I moduli sono documentati e si possono conoscere le funzioni e variabili che contengono con il comando: es. help(math) ti dice quali funzioni e variabili sono in math

Le liste in genere contengono dati ordinati, che necessitano di essere aggiornati, mentre le tuple contengono dati che non necessitano di essere aggiornati. LEZIONE 5 INFORMATICA LE SEQUENZE- OPERATORI DI APPARTENENZA Per verificare se un certo elemento è in una certa sequenza si scrive: es. expr in seq per chiedere se è nella sequenza expr not in seq per chiedere se non c'è Nel caso delle stringhe, questi operatori dicono se una certa espressione è una sottostringa Nel caso delle tuple o delle liste, questi operatori dicono se una certa espressione è nella sequenza LE SEQUENZE- OPERATORI DI CONFRONTO E' possibile confrontare due sequenze per vedere se una è minore o maggiore di un'altra facendo riferimento all'ordinamento lessicografico se si incontrano 2 elementi diversi. es. lst = [1, 2, 'abc', 5] print (lst < [1, 2, 'abcd']) ---> darà come output "True" perchè abc è minore di abcd Se due sequenze contengono però elementi di tipo diverso nella prima posizione allora essi non sono confrontabili. Inoltre non si possono confrontare tipi di sequenze diverse LE SEQUENZE - METODI Fra i metodi ricordiamo: nomesequenza.lower() che rende tutto minuscolo nomesequenza.upper() che rende tutto maiuscolo nomelista.append(elemento) che aggiunge un elemento alla fine della lista (se vi sono più elementi all'interno della parentesi, essi verranno comunque contati come uno solo) nomelista.extend(elem1,elem2,elem3) che aggiunge più elementi alla fine della lista nomelista.insert(indice,elemento) che inserisce nella posizione indicata tale elemento e trasla tutti gli elementi successivi nomelista.index(elemento) che indica la posizione dell'elemento tra parentesi nomesequenza.count(elemento) che conta le volte che l'elemento è presente nella sequenza (nel caso della stringa non è sovrapponibile) LE SEQUENZE - ANALISI DEI DATI Fra le funzioni utili ricordiamo: min(seq) e max(seq) utilizzabili in una sequenza ordinabile e che danno il minimo e il massimo sum(seq) utilizzabile in una sequenza contenente caratteri numerici e che dà la somma sorted(seq) per ordinare una sequenza enumerate(seq) che crea una nuova sequenza del tipo: es. seq = ("mela", "pera", "banana") enumerate(seq) ---> [(0, "mela"), (1, "pera"), (2, "banana")] IL CICLO FOR Per elaborare una grande quantità di dati in poco tempo si può utilizzare il ciclo for: for variabile in sequenza: istruzione istruzione Il blocco di istruzioni viene ripetuto per ogni variabile (che assegnamo noi) presente nella sequenza indicata Prima del ciclo for conviene dare come base un accumulatore, ovvero un punto di partenza.

Tale accumulatore dovrebbe essere l'elemento neutro del return. Per esempio nel caso della somma l'accumulatore sarà 0, nel caso il programma debba restituire una lista allora l'accumulatore sarà una lista vuota es. def somma_numeri(seq): accumulatore = 0 for v in seq: accumulatore = accumulatore + v return accumulatore Enumerate è utile nel ciclo for per operare contemporaneamente su indice ed elemento di una lista: es. for i,x in enumerate(seq): ---> così verranno eseguite le istruzioni sia per ogni indice che per ogni elemento della sequenza istruzione istruzione Per iterare al contrario: es. for x in range(len(seq)-1,-1,-1) INTERROMPERE CICLI Con return tutto il ciclo viene eseguito Con continue si fa saltare l'iterazione corrente se una certa condizione è soddisfatta Con break si interrompe il ciclo e si esce da esso RANGE Il comando range serve per generare un intervallo di numeri naturali es. range(0,3) ---> 0,1, es. range(0,5,2) ---> 0,2,4 la terza cifra indica il passo del range (in questo caso prenderà un valore ogni 2) IL CICLO WHILE Il ciclo while ha una struttura del tipo: while condizione: istruzione istruzione Diversamente dal ciclo for, ogni volta che viene eseguita un istruzione, viene nuovamente verificata la condizione. Occorre, dunque che la condizione ad un certo punto sia falsa per non rimanere bloccati nel ciclo. ASSEGNAMENTO DI PIU' VARIABILI E' possibile assegnare contemporanemente più variabili ad altrettanti valori. es. var1,var2 = valore1,valore2 così alla variabile1 verrà assegnato il valore e così via. E' possibile assegnare delle variabili a dei valori presenti in una sequenza solo se il numero delle variabili è pari al numero degli elementi di una sequenza. Questa operazione è detta Unpacking di valori. es. seq = (1,2,3,4) x,y,z,w = seq in questo modo x=1, y=2, z=3 e w= I COMANDI REVERSE/D, SORT/ED E FORMAT Il comando reversed(lista) serve per rigirare una lista, ovvero modifica la lista data come argomento riscrivendola dalla fine all'inizio. Il comando sorted(lista) serve per ordinare una lista, esso accetta come argomento anche la chiave di ordinamento. Il comando reverse(lista) non modifica la lista ma ne crea una copia con gli elementi invertiti. Il comando sort(lista) crea una copia della lista e la ordina. Il comando format ha la seguente struttura: "stringa di {} testo".format(elemento) ---> l'elemento viene aggiunto nella posizione indicata con le parentesi quadre.

una lista contenente le righe che potrei salvare ad esempio righe = f.readlines() Un file di testo è iterabile. Se viene scritto ad esempio "for x in f:" allora si sta iterando sulle righe del file f SCRIVERE SU FILE DI TESTO Per cominciare a scrivere su un file bisogna aggiungere come argomento della funzione "w" che sta per write. con questo comando tutto il testo scritto precedentemente viene cancellato e si scrive ex novo. Con il comando f.write("") aggiungiamo la stringa scritta tra virgolette al file di testo. Tra i vari argomenti aggiuntivi della funzione open ricordiamo:

  • "r" per sola lettura (questo è argomento di default)
  • "w" per scrivere ex novo un file testo
  • "a" per scrivere un file di testo aggiungendo delle stringhe al testo pre- esistente
  • se c'è anche "+b" allora tutte le operazioni descritte vengono effettuate ma con i bit/byte OPERAZIONI SU STRINGHE Si tratta sempre di una serie di metodi, utili per normalizzare delle stringhe o per operare su di esse. Poniamo di avere una stringa s: s.lower() converte tutti i caratteri della stringa in minuscolo s.upper() converte tutti i caratteri della stringa in maiuscolo s.capitalize() solo il primo carattere della stringa in maiuscolo, gli altri vengono convertiti in minuscolo s.count("sottostringa", from, to(escluso)) conta le occorrenze della sottostringa all'interno della stringa s da una data posizione alla pozione di arrivo esclusa (count non conta le occorrenze che si sovrappongono) s.find("sottostringa", from, to(escluso)) cerca la sottostringa nella stringa s e restituisce la posizione del primo carattere della prima occorrenza trovata. Se la sottostringa non è presente restituisce -1. s.splitlines() divide la stringa s secondo le righe. Se viene aggiunto come argomento True, la funzione restituirà anche gli a capo. s.split() divide la stringa in parole in base agli spazi massimali (ovvero in base allo spazio totale tra una parola e un'altra, pertanto verranno contati come spazi massimali anche " \n ", visto come un unico spazio. Si parla in questo caso di whitespace, ovvero una sequenza non vuota di ' ','\n','\t'). Se viene specificato l'argomento allora la stringa verrà separata in base all'argomento inserito e tale argomento verrà saltato. s.strip() serve ad eliminare lo spazio prima e dopo il testo s.replace(togliere, mettere) permette di sostituire ogni elemento del primo agromento presente nella stringa con quello presente al secondo argomento. s.format(numero di format) serve per mettere negli spazi {} presenti nella stringa s degli elementi pari al numero di format presenti. Se ai format viene assegnato un nome ({nome}) allora anche nel metodo format sarà necessario specificare il nome scelto (es. nome = "Jason"). Se nei format sono presenti dei numeri, al loro posto verrano sostituiti gli elementi che si trovano nella posizione specificata. LEZIONE 7 INFORMATICA I DIZIONARI SU PYTHON Il dizionario è una struttura dati che contiene delle coppie in cui a ogni chiave è associato un valore. Data una chiave si può ottenere il valore corrispondente e non viceversa, questo perchè a un valore possono essere associati più chiavi. Un dizionario in Python può essere pensato come una sequenza di coppie di

valori. La ricerca di un elemento in una lista qualsiasi può costare O(nlogn) ma l'inserimento o una cancellazione può costare O(n) operazioni. Ma queste operazioni nei dizionari possono essere compiute con operazioni costanti. In python il dizionario è delimitato da parentesi graffe e ogni chiave associata ad un valore è separata da ":". Per accedere al valore associato si usa: print(nome_dizionario[chiave]) ---> otterrò il valore legato alla chiave. La chiave stessa viene usate come indice ed essa può essere di diversi tipi. Le liste non sono, però, ammissibili come chiavi di un dizionario, perchè le chiavi non devono cambiare (caratteristica delle liste). Se la chiave che si inserisce o che si vuole eliminare non è nel dizionario, python segnala un KeyError. COMANDI VARI nome_dizionario[chiave] mi restituisce il valore corrispondente alla chiave. len(dizionario) corrisponde al numero delle chiavi presenti nel dizionario. dizionario[chiave] = valore ---> creo una nuova coppia chiave valore oppure se la chiave esiste modifico il valore associato. dizionario.pop(chiave) ---> la chiave viene rimossa dal dizionario. Può essere usato l'operatore logico in come facevamo per le sequenze, ma in questo caso l'operazione non costa O(n) operazioni ma un numero costante di esse. Se si itera su un dizionario, si sta iterando sulle chiavi. es. for x in dizionario: ---> le x sono le chiavi oppure: es. for x in dizionario.keys(): ---> è la stessa cosa es. for x in dizionario.values(): ---> sto iterando sui valori associati ad ogni chiave, ovvero itero su una sequenza che contiene i valori. es. for x in dizionario.items(): ---> sto iterando su una sequenza di coppie date da chiave e valore. Il dizionario come struttura dati non garantisce che le chiavi rispettino un ordine. Esso è soggetto e ristrutturazioni mentre si opera. Non si può dunque tener conto dell'ordine o di un indice numerico ma solo attraverso una chiave. Una tabella può essere pensata come un dizionario con chiavi pari al numero di colonne della tabella. Una tabella per essere ben formata deve avere valori dello stesso tipo e della stessa lunghezza, inoltre deve essere un dizionario (ovviamente). Una proiezione è una selezione delle colonne della tabella. LEZIONE 8 INFORMATICA VALUTAZIONE DEI TEMPI DI ESECUZIONE E PLOT Per misurare il tempo di esecuzione di un programma si tiene conto delle operazioni che compie per diversi input. In questo modo si valuta il programma in generale senza tener conto dell'ambiente reale ma solo della macchina astratta. Ciò che si va a calcolare è l'efficienza teorica e non quella reale. Cosa influenza il tempo di esecuzione: § algoritmo § implementazione dell’algoritmo § linguaggio compilato/interpretato