Vai al contenuto

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:

    123456 - Alighieri Dante - 21 anni - Informatica - 8 esami
    234567 - Boccaccio Giovanni - 22 anni - Lettere - 10 esami
    345678 - Manzoni Alessandro - 23 anni - Ingegneria - 12 esami
    
  • 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:

    123456:Alighieri:Dante:21:Informatica:8
    

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_studenti ora riceve l'elenco e continua a chiedere studenti finché l'utente risponde s, 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 con int (8 e 11 esami danno 9.50, non 9).
  • Eccezione giusta. I problemi di apertura di un file sono OSError (ad esempio FileNotFoundError), non ValueError.

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.