Vai al contenuto

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 00 a 23;
  • 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 file comandi.txt, uno per riga:
    • v giorno per visualizzare gli appuntamenti del giorno;
    • i giorno ora descrizione per inserire un nuovo appuntamento.

Il main() carica gli appuntamenti da agenda.txt, legge i comandi da comandi.txt e li esegue uno alla volta.

10;12;Pranzo con il capo
17;09;Esame di Informatica
17;17;Riunione di condominio
100;10;Visita dal dottore
75;19;Aperitivo con amici
v 17
i 100 10 Conferenza stampa
i 120 10 Conferenza stampa
giorno 17 ore 09: Esame di Informatica
giorno 17 ore 17: Riunione di condominio
Impossibile inserire appuntamento
Appuntamento inserito correttamente
giorno 120 ore 10: Conferenza stampa

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

  • split per leggere i campi. Ogni riga del file viene divisa con line.split(";"), ogni comando con line.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'ora 09 diventava 9. Ora si stampa con f"{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. open segnala un file inesistente con FileNotFoundError, non con ValueError: apertura_file ora lo intercetta e mostra un messaggio chiaro. Prova a cambiare "agenda.txt" in "Agenda.txt" nel main().