Esercitazione 06 · Sale del centro sportivo¶
Esercitazione 4 di 4 · in stile prova pratica d'esame
Traccia¶
Un centro sportivo desidera un programma in Python per monitorare l'utilizzo settimanale delle proprie sale: inserire, visualizzare, ordinare, cercare, analizzare e salvare le ore di utilizzo. Ogni sala ha un codice numerico progressivo e, per ciascuno dei sette giorni della settimana, le ore di utilizzo.
inserisci_dati: chiede il numero di sale, che deve essere un intero positivo (altrimenti va richiesto). Per ogni sala e per ogni giorno chiede le ore di utilizzo, un numero reale tra 0 e 24 (altrimenti va richiesto). Ogni nuova chiamata sostituisce i dati inseriti in precedenza.-
visualizza_dati: mostra per ogni sala il codice, le ore dei sette giorni e il totale settimanale, ad esempio: -
ricerca_sala: riceve il codice di una sala e ne mostra le ore, il totale settimanale e la media giornaliera, oppure un messaggio se il codice non esiste. sala_piu_utilizzata: mostra codice e totale settimanale della sala più usata. Se più sale hanno lo stesso massimo, vanno mostrate tutte.-
salva_su_file: salva l'elenco ordinato delle sale, una per riga: -
ordina_sale: ordina le sale in ordine decrescente di totale settimanale con il Selection Sort.
Il main() implementa un menu iterativo, eseguito almeno una volta e ripetuto finché l'utente non sceglie di uscire, con le voci: inserimento dati, visualizzazione, ricerca sala, sala più utilizzata, ordinamento, salvataggio su file, uscita. Una scelta non valida mostra un messaggio di errore e ripropone il menu.
Laboratorio¶
Dati di prova
Con 2 sale e queste ore il totale è 57 per la sala 1 e 47 per la sala 2: sala 1 → 1, 2, 4, 6, 7, 18, 19; sala 2 → 2, 10, 9, 8, 5, 6, 7. Per provare la parità, inserisci due sale con le stesse ore.
La soluzione proposta¶
- Lista di liste. Ogni sala è una lista
[codice, ore_L, ore_M, ..., ore_D]: l'elemento 0 è il codice, gli elementi da 1 a 7 sono le ore. Per questo i cicli usanorange(1, 8). - Tabella allineata. Le f-string con
:<10(a sinistra in 10 caratteri) e:>6.1f(a destra in 6 caratteri con 1 decimale) incolonnano i valori;end=""evita di andare a capo dopo ogni ora. - Ricerca con flag. La ricerca lineare usa la variabile booleana
trovatae si ferma appena trova la sala.
Correzioni rispetto alla prima versione, segnate nel codice con # CORREZIONE:
- Parità nel massimo.
sala_piu_utilizzataprima trova il totale massimo, poi scorre tutte le sale e stampa tutte quelle con quel totale. Prova con due sale con le stesse ore. - Ricerca che visualizza. È
ricerca_salaa mostrare ore, totale e media, come chiede la traccia; la media ha due decimali. - Salvataggio ordinato. Prima di scrivere il file le sale vengono ordinate per totale decrescente.
- Eccezione giusta. Aprendo in scrittura gli errori possibili sono
OSError.