Esercitazione 04 · Agenda elettronica¶
Esercitazione 2 di 4 · in stile prova pratica d'esame
Traccia¶
Un programma Python deve gestire un'agenda elettronica relativa a un anno solare: caricare, visualizzare, inserire e aggiornare gli appuntamenti di un elenco denominato Agenda. Ogni appuntamento ha i campi giorno, ora, descrizione.
Gli appuntamenti iniziali sono nel file agenda.txt, uno per riga, nel formato giorno;ora;descrizione. Si assume che:
- il giorno è un numero tra 1 e 365;
- l'ora è scritta su due cifre, da
00a23; - la descrizione è una stringa;
- il numero di righe del file non è noto a priori e il file non è ordinato;
- nello stesso giorno ci possono essere più appuntamenti, ma non alla stessa ora.
Funzioni richieste:
carica_agenda: legge tutti gli appuntamenti del file e li inserisce nell'elenco Agenda.visualizza_appuntamenti_giorno: dato un giorno, mostra in ordine crescente di orario tutti i suoi appuntamenti, oppure un messaggio se non ce ne sono.ordina_appuntamenti_giorno: ordina gli appuntamenti di una giornata per ora crescente con il Bubble Sort ottimizzato.inserisci_appuntamento: riceve giorno, ora e descrizione. Se nello stesso giorno e alla stessa ora c'è già un appuntamento stampa Impossibile inserire appuntamento; altrimenti lo aggiunge, stampa Appuntamento inserito correttamente e mostra gli appuntamenti del giorno in ordine di orario.processa_comandi: legge ed esegue tutti i comandi del filecomandi.txt, uno per riga:v giornoper visualizzare gli appuntamenti del giorno;i giorno ora descrizioneper inserire un nuovo appuntamento.
Il main() carica gli appuntamenti da agenda.txt, legge i comandi da comandi.txt e li esegue uno alla volta.
Laboratorio¶
I file cambiano davvero
La soluzione proposta aggiunge i nuovi appuntamenti in fondo ad agenda.txt (apertura in modalità "a"). Dopo l'esecuzione apri la scheda: troverai la riga 120;10;Conferenza stampa. Se esegui di nuovo, il comando i 120 10 darà Impossibile inserire: premi Ripristina per ripartire dai file originali.
La soluzione proposta¶
splitper leggere i campi. Ogni riga del file viene divisa conline.split(";"), ogni comando conline.split(" "). La descrizione di un comando può contenere spazi, quindi la soluzione la ricostruisce unendo le parole dalla quarta in poi.- Bubble Sort sugli appuntamenti del giorno. Prima si raccolgono gli appuntamenti del giorno (ricerca lineare su tutti gli elementi), poi si ordinano per ora.
Correzioni rispetto alla prima versione, segnate nel codice con # CORREZIONE:
- Ora su due cifre. Convertita con
int, l'ora09diventava9. Ora si stampa conf"{ora:02d}", e l'output coincide con quello atteso dalla traccia:giorno 17 ore 09: Esame di Informatica. - Nome della funzione. La funzione di caricamento si chiama
carica_agenda, come nella traccia. - File mancante.
opensegnala un file inesistente conFileNotFoundError, non conValueError:apertura_fileora lo intercetta e mostra un messaggio chiaro. Prova a cambiare"agenda.txt"in"Agenda.txt"nelmain().