Estratto del documento

Calcolo della mediana e gestione delle liste in Python

Input () deve essere scritto associando un valore a una variabile attraverso l'istruzione di assegnamento A=input(). Siccome i valori assegnati ad a, essendo input, sono delle stringhe, per poi calcolare, per esempio, la mediana, bisogna dire al sistema che quelle stringhe devono essere considerate/interpretate come numeri. Due categorie di numeri: 1) interi o 2) decimali, poi abbiamo anche liste di numeri. Se vogliamo che il sistema interpreti la stringa come numero intero uso la funzione int, float per i numeri decimali. Quindi scriverò b=int(a), ossia metto tra parentesi la stringa che deve essere interpretata come numero intero. Se la stringa non rappresenta un numero non ha senso usare le funzioni int e float perché il sistema non riesce a fare la conversione, ugualmente non posso chiedere la conversione in numero intero se il valore di a che richiedo di convertire è un numero digitale.

Calcolo della mediana

Ho 2 casi se la quantità di valori è pari e se la quantità di valori è dispari. Faccio un caso alla volta: apro un nuovo file (che denomino dati.txt) in cui metto dei valori, non in ordine crescente, se no semplifico il processo, uno per riga, senza lasciare righe vuote. Nella python console devo mettere 1) da quale file prendere le istruzioni scrivendo fp = open('dati.txt') e poi premo invio. Open è una funzione allora se devo mettere dentro la parentesi più argomenti scriverò open('dati.txt', '...') ossia i vari argomenti li divido con una virgola. Se uso un file per la sola lettura scriverò r da read, se lo uso per scriverci allora scriverò w di write. Per poter riesaminare un file lo devo chiudere e riaprirlo, ossia far eseguire al sistema un'istruzione in cui gli dico che non userò più quel file, ossia in questo caso fp.close().

2) Scrivo l'istruzione che legge i dati di quel file che gli ho detto di aprire e con questi dati scrive una lista. Per scrivere una lista si usano le parentesi quadre. Scelgo il nome di una variabile, per esempio x. l = [x for x in fp] ossia gli dico di scrivere una lista in cui i valori contenenti sono quelli presenti in fp. Schiaccio invio e ottengo 7n, 4n, -3n, 7n, 3n, -5. Il meno 5 non ha n perché n indica il fatto che sono andato a capo. Per far capire al sistema che ho dei numeri e non delle stringhe devo fare la conversione quindi 3) dapprima chiudo il file, scrivendo fp.close(), poi lo riapro fp = open('dati.txt') poi scrivo l = [float(x) for x in fp].

Siccome dobbiamo trovare la mediana, dobbiamo ordinare i dati in l in ordine crescente. Allora per ordinare i valori metto nella console l.sort(). Successivamente, sia c la cardinalità di l, allora associa alla cardinalità di l la variabile c e scrivo c = len(l) che mi restituisce la “lunghezza” della lista, che è una sequenza di valori. Ciò che metto nella console, ossia tutte le varie operazioni, alla destra mi dà i risultati. Ora scrivo un costrutto, se c è pari allora... Altrimenti... Quindi scrivo if c % 2 == 0: l1 = l[c // 2 – 1] ossia c diviso 2 meno 1. Doppio slash per indicare che considero solo la parte intera, io sto trovando la posizione di l1 e ovviamente la posizione non può essere decimale l2 = l[c // 2] print((l1 + l2) / 2). Ho scritto se c è divisibile per 2, ossia diviso per 2 mi dà resto 0. I due punti indicano ALLORA. Siano l1 e l2 i due valori centrali, è un assegnamento. Else: l1 = l[c // 2] print(l1). I valori in rosso 0,1,2,3... Sono gli indici degli elementi ossia la posizione che il valore ha nella sequenza.

Esecuzione e debug

Devo mandare in esecuzione, quindi vado in alto dove c’è scritto IG2022... Schiaccio il pulsante destro, mi esce una serie di informazioni e schiaccio RUN, e mi restituisce il primo valore della mediana ricercato nel caso il numero dei numeri sia pari. Poi vado sul file dati.txt aggiungo un altro valore così che mi dia il valore della mediana nel secondo caso, torno quindi su IG... e mando in esecuzione. Se mandando in esecuzione vedo che ci sono degli errori allora devo fare la tracciatura. 3 funzioni principali: assegnamento, iterazione e selezione. L’elaboratore lavora con dati.

Soluzioni di un’equazione di secondo grado

Siccome ogni input mi fa leggere un valore, devo usare 3 input (per a, b, c) che ottengo grazie alla tastiera. Alternativamente si può usare un file, ma solitamente uso un file per dati quando i dati sono indeterminati, come nel caso della mediana. A, b, c sono numeri reali, quindi decimali, quindi uso la funzione float. a = float(input()). In console poi riporto il seguente. Sia delta il risultato dell’espressione è una funzione di assegnamento. Costrutto di selezione gestisce una o più alternative, in questo caso abbiamo 3 alternative, ossia 3 risultati ottenibili. (if... else) Numero soluzioni non posso scriverlo staccato perché rappresenta un'unica variabile, allora metto l’underscore, _. Per esprimere la seconda alternativa (e tutte le alternative intermedie tra la prima e l’ultima), siccome in totale ci sono 3 alternative, uso la parola elif (else + if). La radice di delta posso scriverlo come delta ** 0.5 oppure c’è anche una specifica funzione sqrt che per poterla usare, all’inizio della pagina del calcolatore devo dirgli che importerò informazioni da quella libreria.

Nel complesso quindi il costrutto è: poi nella funzione in cui devo usare la radice. Una volta che si manda in esecuzione il tutto, il calcolatore esegue solo la prima funzione del costrutto. Se però la prima funzione risulta falsa allora, prosegue direttamente alla seconda funzione del costrutto. La funzione print serve per importare anche il risultato sul video. Gli argomenti all’interno della parentesi indicano quali valori ad essi associati si vuole che vengano riportati sul video.

Debug e verifica

Per mandare in esecuzione do dei valori che so che mi fanno uscire il valore di delta minore di 0. Premo invio e mi dà che appunto numero di soluzioni è 0. Poi faccio l’altro caso, ossia delta maggiore di 0, ossia cambio i dati nella console. Poi dovrei fare l’altro caso in cui delta uguale a 0. Se le esecuzioni vanno a termine e non si riscontrano errori per essere certi che tutto va bene vado sul titolo in alto del file aperto, schiaccio tasto destro e debug.

Nello spazio evidenziato azzurro, se io clicco col mouse escono dei pallini rossi, detti pallini di interruzione e sono da mettere nei punti in cui penso che ci potrebbe essere un errore, ossia sulle istruzioni che comportano conti. Vado sul titolo in alto del file aperto, schiaccio tasto destro e debug. La console inizia ad eseguire il programma, io man mano inserisco i valori che mi chiede di dare alle variabili. Poi si interrompe dove c’è il punto d’interruzione. Se mi dice che tutto è corretto, allora metto un altro punto d’interruzione più avanti oppure se penso che l’errore sia proprio dove c’è il punto rosso, chiedo di verificare la correttezza di proprio quella funzione.

Se uso la freccia in alto a sinistra allora il programma prosegue la verifica fino al prossimo punto di interruzione o fino alla fine se non ci sono altri punti di interruzione. Se invece voglio interrompere l’esecuzione perché si è rilevato un errore e lo devo correggere, clicco il quadratino rosso a sinistra centrale. Se clicco la prima freccia in alto evidenziata in giallo in if, mi salta, alla parte del costrutto successiva perché nella prima parte il delta deve essere minore di 0, ma il delta ottenuto con i dati inseriti è maggiore di 0 (è 261) (cioè abbiamo avuto una funzione che con i dati inseriti risulta essere falsa). Quindi quando arrivo all’else e schiaccio quella freccia in alto appena citata mi farà vedere le soluzioni corrispondenti perché appunto quell’else si riferisce a un delta maggiore di 0.

Gestione delle liste e operazioni di iterazione

Istruzioni di iterazione. Dato un insieme di dati di numeri interi, dividere i pari dai dispari. Abitudine di chiudere subito il file (fp.close()), dopo l’ultima istruzione che usa quel determinato file aperto. Abbiamo una lista, l, e dobbiamo usarla in modo da separare i numeri pari dai dispari. Quali indicazioni dobbiamo dare? Costrutto di selezione. Per p intendiamo l’insieme dei numeri pari. Per d intendiamo l’insieme dei numeri dispari. Come faccio a dire al sistema che p e d sono degli insiemi? L’insieme dei dispari e l’insieme dei pari sono delle liste. l.append è la funzione che aggiunge una variabile in una lista. P =[] è la traduzione del fatto che la lista dei numeri pari è vuota.

Modalità di iterazione

  • Seconda modalità: l è un file, non l’insieme dei valori da elaborare di una lista. Non posso scrivere if x% 2 == 0, perché essendo un file le righe del file sono stringhe, mentre nella è prima modalità le righe della lista sono i singoli valori della variabile. Allora faccio la conversione attraverso la funzione int. Dopo queste scritture scrivo l.close() per chiudere il file di cui ho appena utilizzato i dati. Oppure per fare la conversione posso usare una nuova variabile. Poi mando in esecuzione schiacciando in mezzo, in modo da mettere il purnino rosso nella linea 10 e mando in debug.
  • Terza modalità (iterazione sulle posizioni): si basa sulla posizione degli elementi nella lista, sulle quali è basato il processo di iterazione. La funzione range permette di costruire sequenze di numeri interi. Essendo una funzione ha bisogno di almeno un argomento fino ad un massimo di 3. In questo l’argomento è la lunghezza della lista. range(len(l)) permette di generare la sequenza dei numeri appartenenti alla lista. K è la posizione dell’elemento. Come notiamo questa scrittura è più complicata della prima o della seconda, quindi siccome ciò che ci è utile non è tanto la posizione ma quali valori sono pari e quali dispari conviene fare la prima o la seconda modalità. Fare però un’iterazione sulle posizioni è più generale, quindi va sempre bene, soprattutto nel caso in una lista ci siano ripetizioni di uno stesso valore.
  • Valutazione del programma: per valutare la bontà di un programma bisogna vedere quanto tempo il sistema ci mette ad eseguirlo, il che non dipende da quante sono le informazioni. Quanto spazio occupa l’esecuzione del programma, ossia quanti dati il calcolatore deve memorizzare per esempio in questo esercizio è il numero di dati nella lista) da eseguire e trovare la soluzione. In questo esempio il primo programma ci mette di più del secondo, perché deve eseguire un’istruzione di iterazione in più, ossia quella alla riga due che nella seconda modalità non c’è.

Funzioni

Funzioni = blocchi di istruzioni che dipendono da un parametro. Se una funzione non ha argomento è una funzione costante.

  • Isolare il blocco di istruzioni: Per esempio un blocco di istruzioni è...
  • Definire il blocco delle istruzioni: Prima del blocco scrivo def, ossia gli sto dicendo quali sono le istruzioni che dipendono dal parametro e do un nome che scelgo io alle istruzioni, per es. def Separa. Poi metto le parentesi al cui interno indico gli argomenti parametro della funzione. In questo caso per eseguire il calcolo, è necessaria la lista dei valori e il numero con cui divido in 2 parti l’insieme dei valori. I parametri tra parentesi sono quel qualcosa che non mi fa variare il risultato, sono le generalità con cui si affronta il calcolo. L è la lista da cui prendo i numeri, v è il numero per cui divido in due parti la lista, per es. era 7. Quindi scrivendo v sostituisco il 7 con la lettera v.
  • Definire il rientro delle istruzioni: Rientro di almeno un carattere le istruzioni sottostanti a “def”, perché def è un’istruzione e come sempre, dopo le istruzioni si rientra di almeno un carattere. Se le istruzioni producono dei nuovi risultati, dei nuovi valori costruiti è necessario dirlo al sistema. Questa istruzione, nella maggior parte dei casi, viene messa come ultima istruzione del blocco. Nel nostro caso i risultati che producono sono le due nuove liste, p e d. Quest’istruzione, ossia quella che mi dice che risultato mi restituisce il blocco, è return, seguita dai risultati restituiti del blocco nel nostro caso p e d.
  • Eseguire la funzione: Quando definisco il blocco di istruzioni voglio far fare l’esecuzione di una variabile, la variabile Separa, di tipo funzione. Quindi alla fine del blocco scrivo Separa(l, 2). Ossia nelle parentesi metto la Variabile associata a una lista di numeri, ossia l, e il valore con cui effettuo la divisione, ossia per esempio 2. Quindi gli sto dicendo di usare la funzione Separa con gli argomenti messi ora tra parentesi. Per esempio, se non ho un file con una lista a parte posso anche usare un’istruzione del genere, ossia mettere la lista direttamente tra parentesi: Se voglio avere il risultato di ciascuna riga che ho appena scritto posso fare così: Poi mando in esecuzione.

Esempio 2: Istruzione di selezione

Uso import math, perché mi serve quella libreria per utilizzare la funzione logaritmica ed esponenziale. Oppure, se mando in esecuzione questo tipo di impostazione ottengo...

Funzione separa

Definiamo la funzione separa: date tre liste a, b, c separare i numeri in a da pari a dispari e mettere i pari nella lista b e i numeri dispari in c. a, b, e c sono argomenti della funzione. In questo caso l’operazione è una modifica di quello che già ho, ossia le liste a, b e c, allora non uso la funzione return. Invece, se viene costruito un nuovo elemento dalla funzione allora si usa la funzione return. Siccome ho le tre liste, a, b, c ossia variabili alle quali devo associare i numeri. Poi mando in esecuzione con la funzione print(). RICORDA SEMPRE CHE PER ESSERE CERTA CHE UN PROGRAMMA FUNZIONI CORRETTAMENTE BISOGNA FARE Più PROVE, CON DATI DIVERSI, PER ESEMPIO IN QUESTO CASO VALORI DIVERSI DELLE LISTE.

Esercizio 2

Per ogni elemento x della lista A se x è contenuto almeno una volta, ossia appartiene, nella lista b allora la posizione di x (in a) bisogna aggiungerla nella lista c. La funzione deve anche restituire il numero di valori aggiunti alla lista c. L’iterazione può essere fatta su valori o su posizioni, solitamente è più comodo farlo sui valori, ma dipende. Index mi dà la posizione dell’elemento x. Il fatto che “la funz. deve restituire il numero di valori add a c” è una funzione di RETURN, allora basta sapere il numero di elementi di una lista c (con funzione len), o contarli man mano che si aggiungono.

Se li conto man mano, devo scrivere così: Immagina che ho un pungo chiuso che corrisponde allo 0, man mano alzo un dito per ogni elemento a che è anche in b e aggiungo nella lista c. Se invece uso la funzione len scrivo: Siccome c’è una return, e voglio che la funzione Elabora mi restituisca un valore devo associare a elabora una variabile. Ricorda che la posizione del primo numero in lista è 0. Se z non è una lista vuota, se mando in esecuzione mi dà sbagliato il risultato quindi questo programma non funziona aaaa!!!! Conteggia anche i numeri già presenti in z. quindi devo fare così: Ossia inizialmente ho solo la lunghezza di c, poi dopo aver trovato che numeri inserire, per trovare i numeri inseriti metto la lunghezza attuale di c meno la lunghezza che aveva inizialmente.

Se ho, il programma mi restituisce 0, 2, 0 nella lista z perché la funzione index per definizione mi restituisce la posizione del primo numero, quindi siccome 2, la prima volta che lo si incontra, ha posizione 0 in x, allora ogni volta che avrò 2 nella lista a mi restituisce il valore 0 della posizione nella lista c. Devo fare quindi iterazione per la posizione. Assegno ad x la posizione e faccio così: METODO CORRETTO!!! Valore di a in posizione x lo scrivo a[x]. Ora mandando in esecuzione mi restituisce i valori corretti.

Esercizio 3

La lista A contiene le probabilità di un insieme di eventi, mettere nella lista B le probabilità cumulate. Siccome voglio che la lista b contenga solo...

Anteprima
Vedrai una selezione di 18 pagine su 84
Appunti informatica generale, mySQL e python Pag. 1 Appunti informatica generale, mySQL e python Pag. 2
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 6
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 11
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 16
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 21
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 26
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 31
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 36
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 41
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 46
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 51
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 56
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 61
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 66
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 71
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 76
Anteprima di 18 pagg. su 84.
Scarica il documento per vederlo tutto.
Appunti informatica generale, mySQL e python Pag. 81
1 su 84
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Fedecape01 di informazioni apprese con la frequenza delle lezioni di Informatica generale e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano - Bicocca o del prof Avellone Alessandro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community