











































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
Panoramica degli argomenti trattati: - Introduzione - Programmare con numeri e stringhe - Decisioni - Cicli - Funzioni - Liste - Eccezioni e file - Insiemi e dizionari
Tipologia: Appunti
1 / 51
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!












































Il computer è una macchina che immagazzina dati, interagisce con dispositivi ed esegue programmi. I programmi descrivono a un computer in estremo dettaglio la sequenza di passi che devono essere eseguiti. In un computer distinguiamo i componenti hardware (parte fisica di un calcolatore e i suoi dispositivi periferici): Le unità di input e output che hanno lo scopo di convertire l’analogico in digitale e viceversa. L’unità di elaborazione detta microprocessore che esegue le istruzioni. La memoria. Dai componenti software (i programmi che vengono eseguiti nel hardware) Durante l’esecuzione di un programma, i dati e i programmi che si trovano nella memoria secondaria, vengono caricati nella memoria principale, qui la CPU esegue il programma e aggiorna i dati nella memoria principale, dopodichè li archivia, così modificati, nella secondaria. Successivamente in base ai dati ricevuti come input la CPU interagirà con dispositivi di uscita, dando così l’output. Un linguaggio si di erenzia in basso ed alto livello in base al grado di astrazione fra il linguaggio considerato (java, python etc) ed il linguaggio macchina (sequenza di 0 e 1).
Il microprocessore è il circuito che fisicamente esegue tutte le istruzioni. Ha limitate capacità di memorizzare dati e/o istruzioni, lo stretto necessario per eseguire le operazioni in maniera e ciente. Il microprocessore al suo interno presenta la CPU ( ossia quella parte che e ettivamente esegue le elaborazioni), la memoria e le interfacce. La CPU ancora a sua volta presenta: ❖ unità di controllo → in base alle istruzioni contenute nel programma ed allo stato di tutte le unità, decide le operazioni da eseguire ed emette ordini. E’ composta da: ➢ PC → registro che indica l’indirizzo della cella di memoria che contiene la prossima istruzione da eseguire
64 bit rappresenta la dimensione dei dati su cui lavora la CPU. Questo numero determina il parallelismo di tutte le componenti interne al processore,. i registri, l’unità di calcolo, la memoria,...64 bit è dunque la dimensione naturale dei dati trattati. Il 64 bit è un compromesso tra la capacità di calcolo (più bit → più potenza) e il costo realizzativo ( più bit → più silicio delle cpu e memorie → più costi) La memoria memorizza i dati e le istruzioni necessarie all’elaboratore per operare. Le caratteristiche sono:
➔ flash ➔ disco rigido → supporti di plastica o vinile su cui è depositato del materiale magnetizzabile, nel corso delle operazioni i dischi vengono mantenuti in rotazione a velocità costante e le informazioni vengono lette e scritte da testine Tutte queste componenti sono connesse tra loro tramite i bus , linee di comunicazione condivise. Le varie unità di un calcolatore non sono collegate direttamente tra loro, ma sono tutte collegate ad un gruppo unico di fili, detto bus. Trasporto di un solo dato per volta. Frequenza: num di dati trasportati al secondo// Ampiezza: num di it di cui è costituito un dato Un singolo bus è suddiviso in tre sotto bus: bus degli indirizzi (Address BUS) → indica gli indirizzi di memoria o periferici da cui leggere o scrivere un dato, l'indirizzo è impostato dall’unità di controllo → determina il max numero di celle di memoria indirizzabili bus dei dati (Data BUS) → contiene il dato letto dalla memoria/o da periferiche input, può essere impostato dall’unità operativa o dalla RAM → dimensione di una cella di memoria detto anche parallelismo di memoria bus di controllo (Control BUS) → contiene una serie di comandi dall’unità di controllo (l’operazione da eseguire, la tempistica e lo stato dell’operazione eseguita) Un bus seriale è fatto da un solo filo, un bus parallelo invece è un bus composto da più fili in parallelo max memoria = 2^|Abus| * |Dbus| bit RICORDA: 1 Byte = 8 bit, M = 2^20, K = 2^10, B= 2^
Pseudocodice , descrizione informale di una sequenza di passi che portano alla soluzione di un problema, non è destinato alla lettura da parte di programmi bensì di persone. Algoritmo è una descrizione passo-passo di come risolvere un problema. L’esistenza di un algoritmo è prerequisito essenziale per la programmazione. Una sequenza di istruzioni il cui ordine è importante. Tale sequenza deve essere:
Una variabile è una zona di memoria dotata di un nome, in cui si possono archiviare informazioni. Una costante è una variabile il cui valore deve essere modificato dopo che le è stato assegnato il valore iniziale Una libreria è una raccolta di codice scritto e compilato da terzi, che è pronto all’uso in un programma Finchè la condizione è vera, gli enunciati presenti all’interno del while vengono ripetutamente eseguiti e costituiscono il cosiddetto corpo. A volte un ciclo di questo tipo viene detto controllato da contatore, in altri casi invece si dice controllato da un evento Il ciclo for … in serve a iterare su tutti i valori di un qualsiasi contenitore, in questo caso il contenitore range. Un contenitore è un oggetto (come una stringa) che può memorizzare un insieme di elementi. Python ha diversi tipi di contenitori: Una stringa è un contenitore di caratteri Una lista è un contenitore di valori arbitrari (numerici stringhe, liste, …) Un file è un contenitore di linee di testo Esiste il contenitore ‘range’, si tratta di un contenitore speciale di una sequenza di numeri consecutivi. Si genera con la funzione range(N) e crea una sequenza di interi da 0 a N-1. La visibilità di una variabile è definita come l’insieme delle righe del programma in cui è possibile usare il valore di una variabile sopra definita: Variabile locale => definita all’interno di una funzione o più in generale all’interno di un blocco di codice, e dunque è visibile fino alla fine della funzione o blocco di codice Variabile globale => definita al di fuori di tutte le funzioni, dunque è visibile in tutto il file lista ⇒ struttura dati versatile e dinamica, che contiene un numero variabile di elementi, di qualunque tipo, a cui si può avere accesso tramite la loro posizione (indice, es: list[i]). Gli indici partono da zero. Liste e stringe sono molto simili ma di eriscono sotto due aspetti: le liste possono memorizzare qualsiasi tipo di dato, le stringhe invece solo i caratteri le liste sono mutabili (es: lista[5]=8 l’elemento della lista in posizione 5 diventa 8) , le stringhe no Il metodo sort() ordina una lista di numeri o stringhe, dal valore minore al maggiore, viene modificata la lista stessa. Ordina sia i numeri che le stringhe
Si definisce alias una variabile associata al valore di un altra variabile. Lo stesso dato/valore può essere modificato attraverso entrambe le variabili. La except viene eseguita quando una delle condizioni nel blocco try genera un'eccezione del tipo specificato nella except
Dal sistema binario al sistema decimale: base → 2 cifre → {0, 1} 101 (2) = 1 x 2^0 + 0 x 2^1 + 1x 2^2 = 1 + 0 + 4 = 5 (10) 1101 (2) = 1x2^0 + 0 x 2^1 + 1 x 2^2 + 1 x2^3 = 1 + 0 + 4 + 8 = 13(10) Dal sistema decimale al sistema binario: 21 (10) = 10101(2) 21/2 = 10 con resto 1 (ultima cifra, meno significativa LSB) → 10/2 = 5 con resto 0 → 5/2=2 con resto 1 → 2/2=1 con resto di 0 → 1/2 = 1 con resto 1 (prima cifra, più significativa MSB) 37(10) = 100101(2) 37/2=18 con resto di 1 (ultima cifra meno significativa LSB) → 18/2= 9 con resto di 0 → 9/2 = 4 con resto di 1→ 4/2=2 con resto di 0→ 2/2= 1 con resto di 0 → 1/2 =1 con resto di 1 (prima cifra, più significativa MSB) se è pari il numero binario finisce con zero, se è dispari invece con 1. Stiamo parlando della cifra meno significativa. con n bit, le combinazioni distinte sono 2^n in base 10 → 0 < x < 2^n - in base 2 → 0 < x < 2^ (n-1) 1 byte = 8 bit Somma in binario: 0+0 = 0 0+1=1 1+0=1 1+1=0 riporto di 1 1+1+1=1 riporto 1 Sottrazione in binario: 0-0=0 0-1=1 rubo 1 1-0=1 1-1= Alcune operazioni su un numero fisso di bit, non sono corrette a causa del verificarsi dell’overflow. Il risultato esce dai bit fissati. Ad esempio su 4 bit posso
fare dal num 0 al num 15. Tale condizione può verificarsi sia nel caso di somme che nel caso di di erenze. Errore che si verifica in un sistema di calcolo automatico quando il risultato di un’operazione non è rappresentabile con la medesima codifica e numero di bit degli operandi. L’overflow è una condizione dinamica e esiste solo come risultato di un’operazione. Per rappresentare numeri con segno positivo o negativi esistono varie soluzioni:
Una funzione è un insieme di istruzioni che eseguono un compito specifico, essa viene invocata specificando il nome e gli argomenti, i quali vanno racchiusi tra () e separati tra loro da una “,”. Una stringa è una sequenza di caratteri racchiusa da una coppia di virgolette, singole o doppie. Le stringhe sono immutabili: non possono essere modificate dopo la loro creazione. print(“The answer is”, 7+2) La funzione print nello specifico va a capo, motivo per cui se la si lascia vuota () essa realizza una riga vuota. In python tutti gli enunciati devono iniziare nella stessa colonna, in caso contrario è errore. Pseudocodice , descrizione informale di una sequenza di passi che portano alla soluzione di un problema, non è destinato alla lettura da parte di programmi bensì di persone. Algoritmo è una descrizione passo-passo di come risolvere un problema. L’esistenza di un algoritmo è prerequisito essenziale per la programmazione. Una sequenza di istruzioni il cui ordine è importante. Tale sequenza deve essere: ● Non ambigua → Non vi possono essere delle «assunzioni» sulla conoscenza necessaria per eseguire l’algoritmo. Istruzioni precise comprensibili da tutti. ● Eseguibile → L’algoritmo può essere svolto, in pratica ● Termina → L’algoritmo, prima o poi, dovrà necessariamente terminare e fermarsi (anche se ci sono delle eccezioni) ISTRUZIONI => Operazioni supportate dal linguaggio di programmazione, che saranno eseguite traducendole in codice macchina ● Pseudo-istruzioni → Direttive per l’interprete del linguaggio, non corrispondono ad e ettivo codice eseguibile ● Istruzioni elementari (o primitive) → Operazioni che corrispondono direttamente ad operazioni hardware ● Istruzioni di controllo del flusso → Permettono l’esecuzione di operazioni complesse, controllando l’esecuzione di sequenze di istruzioni elementari Per verificare la correttezza di un programma, occorre testare (collaudare). TEST => insieme di input che viene usato per verificare se il programma genera l’output corretto, in quel caso specifico. Nessun test sarà mai completo al 100%, ma dovrebbe coprire tutti i possibili comportamenti del programma.
Una variabile è una zona di memoria dotata di un nome, in cui si possono archiviare informazioni. Per memorizzare un valore di una variabile si utilizza l’enunciato di assegnazione. Una variabile viene creata nel momento in cui le si assegna un valore per la prima volta, dopodichè assegnando un altro valore a una variabile già esistente, si sostituisce il vecchio valore con uno nuovo. numero = 5 In un programma Python ciascun valore è di uno specifico tipo, tale tipo di dato determina come esso venga rappresentato e memorizzato all’interno del computer. Un tipo di dato che venga messo a disposizione dal linguaggio stesso viene chiamato tipo di dato primitivo. I programmatori però possono definire altri tipi di dato detti tipi di dato definiti dall’utente. Il tipo di dato è associato al valore, non alla variabile. Nel momento in cui una variabile è memorizzata con un valore di un determinato tipo, sarebbe meglio mantenere valori di quel tipo. Numero intero (int) → numero privo di parte frazionaria (possono essere negativi) Numero in virgola mobile (float) → numero con una parte frazionaria (include anche i numeri in notazione esponenziale) Stringa (string) → Sequenza di caratteri Una costante è una variabile il cui valore deve essere modificato dopo che le è stato assegnato il valore iniziale, per tale motivo si tende a nominarle con sole maiuscole. Si usano i commenti (che vengono ignorati dall’interprete) per aggiungere al codice spiegazioni destinate ai lettori umani. #Questo programma calcola il volume in litri Python supporta tutte le operazioni aritmetiche elementari: Addizione ( + ), Sottrazione ( - ), Moltiplicazione ( ***** ), Divisione ( / ), Potenza ( ****** ) I simboli usati per le operazioni aritmetiche si dicono operatori e la combinazione di variabili, letterali, operatori e parentesi costituisce un' espressione. Se non si utilizzano le parentesi basta pensare alla normale notazione algebrica dove moltiplicazione e divisione hanno la precedenza rispetto all addizione e sottrazione. Se invece abbiamo operatori con la stessa precedenza vengono eseguiti i calcoli procedendo da sinistra a destra. Se in un'espressione aritmetica sono presenti valori di tipo intero insieme a valori a virgola mobile, il risultato è un valore in virgola mobile e l’espressione si dice mista. Quando si dividono due numeri interi con l’operatore “ / ”, si ottiene un valore a virgola mobile. Si può però anche eseguire una divisione intera usando l’operatore “ // ” che calcola il quoziente e ignora la parte frazionaria. Se si è interessati al resto della divisione tra interi, va usato l’operatore “ % ” (detto modulo)
Consigli generali: ➔ total += cans =>> total= total+cans ➔ total=2 =>> total=total** ➔ operator overloading ossia operatori che hanno diverse funzioni a seconda dell’utilizzo, come gli operatori + e * ➔ Un'unica riga può essere scritta in due righe diverse o se è all’interno di una coppia di parentesi tonde oppure se l’ultima carattere della prima riga è , in questo modo tale riga viene unita a quella successiva Una stringa è una sequenza di caratteri. Per comprendere il numero di caratteri in una stringa si utilizza la funzione len len() o len(“Hello”) Date due stringhe le si può concatenare per formare una nuova stringa più lunga tramite +. Non si può concatenare a una stringa un valore numerico. firstName= “Sofia” secondName= “Potenza” name= firstName + secondName =>> SofiaPotenza name= firstName + “ ” secondName =>> Sofia Potenza Usando l’operatore * invece si può ripetere una stringa, il fattore moltiplicativo deve essere intero. message = “Echo…”5 =>> Echo…Echo…Echo…Echo…Echo…* Per convertire un valore numerico in una stringa si utilizza la funzione str. numero= str(1000) =>> numero= “1000” Viceversa le funzioni int e float convertono una stringa contenente un numero in tale valore numerico. Le posizioni all'interno delle stringhe si contano a partire dallo zero Il primo carattere ha indice zero (0) e l’ultimo carattere ha indice len(name)-1. L’operatore slice [] ritorna il carattere corrispondente ad un dato indice. stringa= nome[0 : 4]
a nchè invece di spostarmi in avanti ad ogni passo, mi sposto indietro (e quindi prendo gli elementi in ordine inverso), occorre che l’indice start sia maggiore di stop
- nome[9:3:-1]
L’enunciato if consente a un programma di compiere azioni diverse in relazione alla natura dei dati che vengono elaborati. if condizione: enunciato else: enunciato Un ramo if non può essere lasciato vuoto dunque si può utilizzare la funzione pass. Inoltre è possibile inserire due if alla stessa altezza e in tale caso se vere si passa da entrambi. Per verificare che due numeri in virgola mobile (x e y) siano abbastanza simili, si calcola il valore assoluto della loro di erenza e lo si pone inferiore a epsilon (soglia matematica 1E-14) |x-y|<EPSILON Per confrontare l’ordine alfabetico di due stringhe si usa string1 < string
Se una qualunque delle condizioni è vera, il risultato è Vero ➢ NOT Se c’è bisogno di invertire una variabile booleana o il risultato di un confronto, si deve utilizzare il not Tali variabili valgono di qualche proprietà come: ● Commutativa: ○ A and B = B and A ○ A or B = B or A ● Associativa: ○ A and B and C = (A and B) and C = A and (B and C) ○ A or B or C = (A or B) or C = A or (B or C) ● Distributiva: ○ A and (B or C) = A and B or A and C ○ A or (B and C) = (A or B) and (A or C) La legge di De Morgan spiega come negare una combinazione di and e or: