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.

Banner Pubblicitario

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.

Banner pubblicitario

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