Esercitazione 03 · Elenco studenti¶
Esercitazione 1 di 4 · in stile prova pratica d'esame
Traccia¶
Un'università desidera realizzare un programma in Python per gestire un elenco di studenti universitari. Il programma deve consentire di inserire, visualizzare, ordinare, cercare, analizzare e salvare gli studenti presenti in un elenco denominato ElencoStudenti. Ogni studente è descritto dai campi: matricola numerica, nome, cognome, età, corso di laurea, numero di esami sostenuti.
inserisci_studenti: consente di inserire più studenti. Per ogni studente chiede nome, cognome, età, corso di laurea e numero di esami sostenuti. La matricola è generata automaticamente come numero pseudo-casuale tra 100000 e 999999. L'età deve essere positiva e gli esami tra 0 e 40; altrimenti il dato va richiesto fino a corretto inserimento. La funzione può essere richiamata più volte: i nuovi studenti si aggiungono a quelli già presenti.ordina_studenti: ordina gli studenti alfabeticamente per cognome e, a parità di cognome, per nome, con l'algoritmo Bubble Sort ottimizzato.-
visualizza_studenti: mostra gli studenti ordinati nel formato: -
ricerca_studente: riceve cognome e nome da cercare e mostra tutti gli studenti corrispondenti, oppure un messaggio se non ce ne sono. studenti_per_corso: chiede un corso di laurea e mostra matricola, cognome, nome ed esami sostenuti degli iscritti, oppure un messaggio se non ce ne sono.media_esami: mostra la media degli esami sostenuti su tutto l'elenco.-
salva_studenti_su_file: salva l'elenco ordinato su file di testo, uno studente per riga:
Il main() implementa un menu iterativo, eseguito almeno una volta e ripetuto finché l'utente non sceglie di uscire, con le voci: inserimento, visualizzazione ordinata, ricerca, studenti per corso, media esami, salvataggio su file, uscita. Una scelta non valida mostra un messaggio di errore e ripropone il menu.
Laboratorio¶
Dati di prova
Inserisci tre studenti, ad esempio Dante Alighieri (21 anni, Informatica, 8 esami), Alessandro Manzoni (23, Ingegneria, 12) e Giovanni Boccaccio (22, Lettere, 10), poi visualizzali e salvali: comparirà la scheda studenti.txt.
La soluzione proposta¶
La soluzione usa una lista di dizionari: ogni studente è {"matricola": ..., "nome": ..., ...}. Rispetto alla versione originale della soluzione sono state fatte alcune correzioni, segnate nel codice con il commento # CORREZIONE:
- Più studenti per chiamata.
inserisci_studentiora riceve l'elenco e continua a chiedere studenti finché l'utente rispondes, aggiungendoli senza cancellare quelli già presenti, come chiede la traccia. - Formato richiesto. La visualizzazione mostra prima il cognome e poi il nome:
123456 - Alighieri Dante - .... - Età positiva. Il controllo è
eta <= 0: zero non è un'età valida. - Studenti per corso. È la funzione a chiedere il corso e mostra solo matricola, cognome, nome ed esami.
- Media senza errori. Con l'elenco vuoto la media darebbe
ZeroDivisionError: ora c'è un controllo prima della divisione. La media non viene più troncata conint(8 e 11 esami danno 9.50, non 9). - Eccezione giusta. I problemi di apertura di un file sono
OSError(ad esempioFileNotFoundError), nonValueError.
Prova a romperlo
Scegli 5 prima di inserire studenti: invece dell'errore compare un messaggio. Poi prova a rimettere int(...) nella media e confronta i risultati.