Esercizio sui file in Python

In questa lezione svolgeremo un esercizio sui file in Python, al fine di ripassare quanto studiato sinora.

Supponiamo di avere un file di studenti, dova abbiamo salvato i nomi ed i voti di alcuni studenti.

Il file conterrà dunque questi dati di esempio:

Alessandro 7
Luisa 6
Mario 8
Lucia 6
Maria 9
Alice 8
Francesco 9

Dobbiamo:

  1. Fare la media dei voti di tutti gli studenti
  2. Stampare a video il nome degli Studenti che hanno il voto più alto
  3. Creare un dizionario dove la chiave sarà data dal voto. Al voto sono associati una lista dei nomi che hanno quel voto.

Esercizio sui file in Python – primo punto

Risolviamo il primo punto dell’esercizio: fare la media dei voti di tutti gli studenti.

Leggiamo tutti i dati dal file e con il metodo split separiamo il nome dal voto.

Con un ciclo for in poi sommiamo tutti i voti e contiamo il numero di righe.

Avando ottenuto la somma ed il numero di righe siamo in grado di trovare la media.

Ecco dunque una possibile soluzione:


'''
Fare la media dei voti di tutti gli studenti
'''
f = open("studenti.txt","r")

somma = 0
i = 0

for studente in f:
    s = studente.split()
    voto = int(s[1])
    somma = somma + voto
    i += 1

media = somma / 7
print(media)

Esercizio sui file in Python – secondo punto

Adesso dobbiamo stampare a video gli studenti o lo studente che ha il voto più alto.

Per risolvere questo secondo punto vi propongo una soluzione che fa uso dei dizionari.

Come primo passo popoliamo il dizionario con il primo studente contenuto nel file, poi creiamo una variabile max_voto che contiene il voto del primo studente.

Per ogni studente poi confrontiamo il voto con quello contenuto nella variaible max_voto, se è maggiore sostituisce lo studente, se è uguale lo aggiunge.

Ecco dunque una possibile soluzione:


f = open("studenti.txt","r")

st = f.readline() #leggiamo la prima riga

stud = st.split()
#popoliamo il dizionario con il primo studente contenuto nel file
list_students = {stud[0] : stud[1]}

#definiamo una variabile che contiene il voto massimo
max_voto = stud[1]

#per ogni studente controlliamo il voto, se è maggiore lo inseriamo nel dizionario
for studente in f:
    s = studente.split()

    if s[1] > max_voto:
        list_students = {s[0] : s[1]}
        max_voto = s[1]
    elif s[1] == max_voto:
        list_students.update({s[0] : s[1]})

print(list_students)

Esercizio sui file in Python – terzo punto

In questo terzo punto dobbiamo creare un dizionario dove la chiave sarà data dal voto. Ad ogni voto sono associati una lista dei nomi che hanno quel voto.

Inizializziamo un dizionario vuoto, dopo per ogni studente contenuto nel file leggiamo il voto e se non è presente lo aggiungiamo semplicemente alla lista, altrimenti aggiungiamo il nome accanto allo studente già inserito.

Ecco duqnue una possibile implementazione:


f = open("studenti.txt","r")

list_students = {}

for student in f:
    s = student.split()
    voto = s[1]
    if voto in list_students:
        list_students[voto] = list_students[voto] + ', ' +  s[0]
    else:
        list_students[voto] = s[0]

print(list_students)

Conclusioni

In questa lezione abbiamo svolto un esercizio sui file in Python e abbiamo proposto delle soluzioni. Proponi la tua soluzione nei commenti sotto.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

Articoli Correlati

Ordinare un dizionario in Python

Si può ordinare un dizionario in Python per chiave o per valore. Facciamo alcuni esempi pratici di ordinamento in Python in base alle nostre esigenze.

Tutti gli esempi proposti possono essere provati nel compiler online che troverete al seguente link: Python compiler online.

Primo esempio – Ordinare un dizionario in Python per chiave

In questo primo esempio dapprima creiamo un dizionario in Python. Abbiamo poi detto di ordinare per chiave, quindi dobbiamo decidere se seguire un ordine crescente o decrescente, infine dobbiamo richiamare la funzione sul dizionario.

Implementiamo, dunque, una prima soluzione. Per ordinare in senso crescente possiamo utilizzare la funzione sorted sul nostro dizionario, in questo modo:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

for key in sorted(student):
print(key, student[key])

E se vogliamo un ordinamento decrescente? Basterà semplicemente utilizzare il parametro reverse della funzione sorted, impostandolo a False.

Ecco un esempio di dizionario ordinato in senso decrescente in Python:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

for key in sorted(student, reverse = True):
print(key, student[key])

Secondo esempio – Ordinare un dizionario in Python per chiave

Cerchiamo adesso una seconda soluzione al problema proposto.

Innanzitutto potremmo ad esempio pensare di utilizzare il metodo keys() sul dizionario, ma cosa succede?

Proviamolo, dunque, con un esempio:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

sorted_key = sorted(student.keys())

for element in sorted_key:
print(element)

In questo caso si avrà il seguente output:

age
hobby
mail
name
passion

Ovvero avremo le sole chiavi ordinate in senso crescente.

Quindi, anche se uso il metodo dict() non riuscirò in questo modo ad ordinare un dizionario in Python.

E se invece proviamo ad utilizzare il metodo values()?

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

sorted_values = sorted(student.values())

for element in sorted_values:
print(element)

Il risultato sarà il seguente:

29
Cristina
coding
[email protected]
swim

Quindi se voglio ordinare un dizionario in Python per chiave cosa devo fare? Quale altra soluzione posso pensare?

Possiamo, ad esempio, utilizzare il metodo items(), che abbiamo studiato in questa lezione: items Python.

Ricordiamo inoltre che questo metodo è utilizzato per restituire l’elenco con tutte le chiavi del dizionario con i suoi rispettivi valori.

Dopo, possiamo nuovamente riconvertire le coppie di tuple in un dizionario utilizzando il metodo dict().

Ecco una possibile soluzione al nostro algoritmo:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

sorted_student = sorted(student.items())
sorted_student_dict = dict(sorted(student.items()))

print(sorted_student_dict)

for element in sorted_student_dict:
print(element, ‘: ‘, sorted_student_dict[element])

Così abbiamo ottenuto tutte le coppie di tuple chiave, valori ordinate in senso crescente. Poi, convertiamolo in dizionario con il metodo dict(). Così riusciamo ad ordinare il dizionario in Python per chiave.

Utilizziamo una funzione per poterla poi utilizzare per creare l’ordinamento su più dizionari:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

def sort_dict(d):
return dict(sorted(student.items()))

print(sort_dict(student))

Ordinare un dizionario in Python per chiave in senso decrescente

Questa volta utilizziamo il parametro reverse di sorted per creare un ordinamento decrescente sui dizionari. Infatti impostandolo a True l’ordinamento sarà decrescente. Di default il suo valore è False.

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

def sort_dict(d):
return dict(sorted(student.items(), reverse = True))

print(sort_dict(student))

Per completezza potremmo passare questo parametro anche alla funzione, in questo modo:

student = {
“name”: ‘Cristina’,
“age”: ’29’,
“hobby”: ‘swim’,
“mail”: ‘[email protected]’,
“passion”: ‘coding’
}

def sort_dict(d, rev):
return dict(sorted(student.items(), reverse = rev))

print(sort_dict(student, True))

Conclusione

In questa lezione abbiamo affrontato alcuni interessanti esempi su come ordinare un dizionario in Python per chiave, in ordine crescente e decrescente.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

11 – Modulo math

Vuoi rimanere aggiornato sulle nuove tecnologie per la Didattica e ricevere suggerimenti per attività da fare in classe?

Sei un docente?

soloscuola.it la prima piattaforma
No Profit gestita dai

Volontari Per la Didattica
per il mondo della Scuola. 

 

Tutti i servizi sono gratuiti. 

Associazione di Volontariato Koinokalo Aps

Ente del Terzo Settore iscritta dal 2014
Tutte le attività sono finanziate con il 5X1000