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


Introduzione alla programmazione con Python con esercizi, Appunti di Fondamenti di informatica

Introduzione alla programmazione partendo dalle definizioni di tipi di base, vari esercizi, fino ad arrivare ai dizionari.

Tipologia: Appunti

2022/2023

In vendita dal 15/09/2023

helgrind-1
helgrind-1 🇮🇹

3 documenti

1 / 48

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Esercizio con le stringhe
Data una str e int io voglio rimuovere da str il carattere indicato da int (praticamente l’indice)
Cos’è lo slicing? S [i:j] prendo quella parte della stringa che parte da i e finisce a j-1
S[:i] parti da 0 e arriva a i-1
Io prendo porzioni di stringa [a;b)
Se io ho la mia stringa e voglio rinizializzare la str, dare un altro valore a str (simone Simone, ho cambiato
la s) lo posso fare, posso riinizializzare la str, non la posso mutare, per questo le str si definiscono come
immutabili. Una volta inizializzate non posso modificarle
Posso fare print(s[1]) così mi stampa quel carattere in quella posizione
La funzione REPLACE (studiare)
Se metto un intero cosa succede? Succede che vengono rimpiazzate le prime 5 (ad esempio) lettere con i
parametri che ho passato
Se io voglio scrivere s’imone, inteso proprio che voglio stampare un apostrofo, messo un ESCAPE
CHARACTER ovvero \ print ("s\'imone")
Molto spesso vengono usate (le str per definire un percorso)
s = “C:desktop\\foto” DEVO METTERE UN DOPPIO BACK SLASH
txt = " ciao ciao come va" voglio sapere quanto volte una parola è presente
ricorro alla funzione count
count = txt.count('ciao')
Io posso aggiungere anche l’intervallo della str nel quale effettuare la conta
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

Anteprima parziale del testo

Scarica Introduzione alla programmazione con Python con esercizi e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

Esercizio con le stringhe Data una str e int io voglio rimuovere da str il carattere indicato da int (praticamente l’indice) Cos’è lo slicing? S [i:j] prendo quella parte della stringa che parte da i e finisce a j- S[:i] parti da 0 e arriva a i- Io prendo porzioni di stringa [a;b) Se io ho la mia stringa e voglio rinizializzare la str, dare un altro valore a str (simone  Simone, ho cambiato la s) lo posso fare, posso riinizializzare la str, non la posso mutare, per questo le str si definiscono come immutabili. Una volta inizializzate non posso modificarle Posso fare print(s[1]) così mi stampa quel carattere in quella posizione La funzione REPLACE (studiare) Se metto un intero cosa succede? Succede che vengono rimpiazzate le prime 5 (ad esempio) lettere con i parametri che ho passato Se io voglio scrivere s’imone, inteso proprio che voglio stampare un apostrofo, messo un ESCAPE CHARACTER ovvero \  print ("s'imone") Molto spesso vengono usate (le str per definire un percorso) s = “C:desktop\foto” DEVO METTERE UN DOPPIO BACK SLASH txt = " ciao ciao come va" voglio sapere quanto volte una parola è presente ricorro alla funzione count count = txt.count('ciao') Io posso aggiungere anche l’intervallo della str nel quale effettuare la conta

3 è l’inizio da dove iniziare a contare, len(txt) la fine del conto [3, len) (estremo inferiore incluso, estremo superiore escluso) Endswith è un booleano che stampa o true o false, anche qua posso mettere (opzionale) inizio e fine del controllo, allo stesso modo startswith è un booleano che fa la stessa cosa -1 perché asd non esiste

Un codice è efficace quando funziona Quando un codice è più efficiente dell’altro? Quando uno sfrutta meno memoria e/o viene eseguito in meno tempo Si parla quindi di efficienza spaziale e temporale 1 2 2 è più efficiente di 1 (per via degli else) 3 3 è migliore di 2 perché l’espressione booleana richiede meno calcoli 11/10/ Se voglio evitare di importare tutta la libreria posso usare il. From libreria import x From math import sqrt (così importo soltanto la radice quadrata)

così ho importato soltanto l’oggetto date e non ho avuto bisogno di scrivere manualmente la data perché l’ha presa in automatico Oggetto contiene dati e funzioni Il segno (+) fra stringhe, serve a CONCATENARLE L’esercizio del voto si può migliorare aggingendo una variabile booleana che cambia a seconda dei casi, quando è false, nella casistica, diventa false e stampa (“non puoi votare”) % indica il modulo del resto della dvisione intera 7 % 3 = 1 (2 col resto di 1) 2 % 3 = 2 0 % 3 = 0 1 % 3 = 1 2 % 3 = 2 3 % 3 = 0 4 % 3 = 1 5 % 3 = 2 6 % 3 = 0 7 % 3 = 1

... (x+1) % b ci permette di gestire gli incrementi circolari nell’intervallo [0,b) (da 0 a b-1)

ISTRUZIONE WHILE

While espressione booleana: si ripete finchè l’espressione booleana è vera (può contenere tutti gli operatori che abbiamo a disposizione (or, not, and) (>,<,>=,<=, !=, ==…)) |-------| blocco istruzioni

verifica esistenziale, abbiamo una sequenza di valori e voglio vedere se esiste un valore che soddisfa

alcuni requisiti Lo schema di solito è Trovato = false While la sequenza non è finita and not trovato: x = prendi prossimo elemento If x soddisfa i requisiti: trovato = true … (altre istruzioni) Mi serve trovare un elemento per uscire dal ciclo

Supponiamo di voler verificare che esiste un numero dispari nella sequenza letta #verifica universale: per ogni elemento, quell’elemento soddisfa i requisiti delle condizioni che impongo STRINGHE S = “ciao” Len (s) mi stampa 4, che è la lunghezza della stringa (LA LUNGHEZZA DELLA STRINGA, RICORDA VA DA 0 A LEN S -1) S [0] mi stampa il primo carattere La funzione s.strip elimina gli spazi in una stringa Rstrip toglie gli spazi nella parte destra Lstrip toglie gli spazi nella parte sinistra Strip è una funzione di propprietà dell’oggetto s Quindi gli oggetti di tipo stringa che contiene taaaante funzioni, in questo caso mi opera solo sulle stringhe !!!!!!!!!!!Le stringhe sono immutabili !!!!!!!!!!!!!!!!!!!!!!!!!

Se commento l’incremento di j, il secondo while mi va in loop e mi stampa sempre 0 Se commento l’incremento di i, il primo while mi va in loop e stampa sempre 1 In generale va in loop quando tolgo la condizione d’uscita

Mi raccomando, ragiona al contrario Crittografia = prende un testo e lo critta secondo un algoritmo Algoritmo di crittografia è quello del cifrario di cesare. Prende in input un testo e una chiave Es. prendiamo la stringa ANNA e una chiave, per esempio 2. Applicando il cifrario di cesare con questi due input, otteniamo CPPC (le lettere vengono traslate di 2, le parole vengono traslate secondo un criterio)

#programma che genera una password randomica, deve avere una certa lunghezza, deve avere dei criteri import random lunghezza = random.randrange(10,15) lettere = 'abcdefghijlmnopqrstuvwz' cifre = '0123456789' altri_caratteri='+ùò!£$%&/()=?' password = '' numero_lettere = 0 numero_cifre = 0 altro = 0 alfabeto = lettere+cifre+altri_caratteri while len(password) < lunghezza: while numero_lettere < 5: random_index = random.randrange(0,len(lettere)) random_character = lettere[random_index] password+=random_character numero_lettere += 1 while numero_cifre < 4: random_index = random.randrange(0,len(cifre)) random_character = cifre[random_index] password+=random_character numero_cifre+= 1 while altro <3 : random_index = random.randrange(0,len(altri_caratteri)) random_character = altri_caratteri[random_index] password+=random_character altro += 1 if len(password) < lunghezza: caratteri_mancanti = lunghezza - len(password) while len(password) Per rappresentare 57 info ho bisogno di 6 bit, 2^64, mi danno 64 configurazioni diverse di 0 e 1 Byte = 8bit = 2^8 bit = 256 configurazioni di 0 e 1, se le configurazioni le interpreto come num naturali, posso rappresentare i numeri da 0 a 255. Se fossero numeri relativi devo capire cosa rappresentare, ma sempre le stesse configurazioni ho 1 kb = 2^10 byte 1 Mb = 2^20 byte 1 Gb = 2^30 byte Prima le architetture dei pc erano a 32 bit, quindi potevano contenere 4 Gb, se avessi voluto espandere questa memoria, sarebbe stato inutile Il numero di bit che posso indirizzare in maniera univoca nel pc prende il nome di word Se la parola fosse di 8 bit, avrei avuto un max di memoria di 4 gb Se la parola fosse stata di 16, sempre 4 gb avevo ma accedevo a 16 bit, invece di 8 Poi a 32 bit ma sempre 4 miliardi di indirizzi avevo. Cambiavo l’architettura ma non la memoria!!!!! In alcune architetture il microprocessore, ad esempio, era a 32 mentre i bus a 16. La cpu e l’alu etc lavoravano a 32 ma per mandare le info che servivano io dovevo fare 2 accessi (16 bit dei bus) in memoria per prendere ciò che mi serviva Cosa trovo in memoria? DIPENDE DA COM’È ORGANIZZATA LA MEMORIA, l’accesso minore che posso fare è a 16, sono sempre costretto a farlo, meno non posso, se ho bisogno solo del singolo bit, diventa compito del programmatore come gesitre le info, un metodo è quello di organizzare l’indirizzo in modi diversi, es i primi 3 bit fanno x, i secondi 2 fanno y etc… risparmio bt (“spacco il bit”) il sistema decimale: ha 10 cifre: 0.1.2.3.4.5.6.7.8. in qualunque sistema il numero delle cifre dipende dal sistema (decimale = 10, binario = 2 …) La posizione di una cifra in un numero indica il suo peso di potenze 10(nel caso del sistema decimale) Unità = 10^ Decine = 10^ Centinaia = 10^

... Nei sistemi posizionali il valore di una cifra dipende da dove si colloca

Cifra (c) in posizione (i) ha contributo = c * B^i b = base del sistema 213 in base 8 = (28^2+18^1+38^0) = (264+8+3) = 139 (trasformato in base 10, altrimenti lo interpreto come 218 in base 8) Nel sistema binario: 1011 = (12^3+02^2+12^1+12^0) = (8+2+1) = 11 (in decimale) Lo posso contare anche come acceso/spento. Se l’ultimo bit è “acceso” (1) il numero è pari, se è “spento” è dispari Per passare da binario a decimale scompongo il bit e sommo il contributo dei singoli bit Se tutti i bit sono “accesi”, ho 255 1111111 = 255 Ma se volessi 256? Ho bisogno di un altro bit 1 0000 0000 100 + 10 = 110 che è 6 in binario (4) + (2) = (6) 110 + 10 = 1000 !!!! il cambio, il riporto, come lo vuoi chiamare, avviene quando n >= 2, TIPO NELLE ADDIZIONI IN BASE 10 n>= Se ho un numero binario (110) = (12^2+12^1+02^0), se volessi dividere per 2 questo numero, posso mettere in evidenza il 2, quindi riduco di 1 tutti gli esponenti e diventa 2(12^1+1*2^0), quando vado a dividere mi basta togliere il 2 fuori dalla parentesi. Quindi mi basta scalare di uno il grado Per dividere un numero per 2, mi basta “shiftarlo” verso destra, basta farlo scorrere verso destra, quello che cade è il resto della divisione intera 110  11 (immagina come se ci fosse un burrone, uno cade e gli altri restano) Per moltiplicare, invece, basta scorrere verso sinistra, e aggiungere uno 0 Voglio convertire 12 in base 2, qual è il numero? 12 = il bit più a destra del numero 12, divido per 2 e “faccio cadere” quel bit e vedo se è pari o dispari 12 % 2 = 0 12 / 2 = 6 6 % 2 = 0 6 / 2 = 3 3 % 2 = 1 3 / 2 = 1. 1 % 2 = 1 1 / 2 = 0.5, ORA CHE SONO ARRIVATO A 0 MI FERMO Quindi il numero è 1100 (i moduli mi servono pe leggere il numero, le divisioni mi dicono quando mi fermo)

!!!ATTENZIONE!!! LE FUNZIONI DEVONO ESSERE PRECISE E CONCENTRATE, INTUTILE ALLUNGARLE

Convertitore esadecimale: inizio a fare il num / 16, il resto sarà la prima cifra Es. 34 in hex 34/ 16 = 2 resto 2, 2 sarà la prima cifra 2 / 16 = 0 resto 2 , 2 sarà l’altra cifra 0 / 16 = stop 34 in hex = 2 2

C’È UN ERRORE

A RIGA 14 DEVO INVERTIRErisultato = risultato + chr(codiceCifra)risultato = chr(codiceCifra)+risultato Ora lo provo È giusto, FF è il massimo valore (255) che può assumere, sono le massime combinazioni Ogni coppia di esa equivalgono ad un byte. 4 byte sono 32 bit Io, quando uso una funzione , posso usare anche lo stesso nome per i parametri attuali. Nel “cassetto di memoria” non ha valenza come chiamo le variabili. Si definisce un pezzo di memoria, chiamato record di attivazione della funzione , che contiene tutto ciò che c’è nella funzione. ogni volta che faccio una chiamata ad f si predispone una parte di memoria che è separata dal resto del “mondo”. Ciò che nasce nella funzione, viene lavorato e muore là. Quello che faccio all’interno della f ad un parametro, non si ripercuote al parametro che ho passato.