Traccia d'esame · Biglietteria cinema¶
Durata: 1 ora e 30 minuti · file: main.py, cinema.py, film.txt
Cosa chiede la traccia¶
Il programma simula una biglietteria automatica. All'avvio legge da film.txt l'elenco dei film: per ognuno titolo, prezzo del biglietto e posti disponibili, su tre righe consecutive. I dati si tengono in liste (consigliate tre liste parallele titoli, prezzi, posti; i dizionari sono una variante avanzata).
Poi il programma mostra un menu numerato e, con un ciclo while, permette di:
- scegliere un film oppure uscire con
0, verificando che il film esista; - indicare quanti biglietti acquistare e verificare che i posti bastino;
- vedere il totale, inserire l'importo pagato e, se non basta, sapere quanto manca;
- completare l'acquisto: aggiornare i posti e mostrare il resto.
È sufficiente un acquisto per esecuzione. Opzionale: salvare su file i posti aggiornati.
Funzioni richieste in cinema.py: leggi_film(nome_file), stampa_menu(titoli, prezzi, posti), posti_sufficienti(posti, indice, numero_biglietti), calcola_totale(prezzo, numero_biglietti), pagamento_sufficiente(importo_pagato, totale), vendi_biglietti(titoli, prezzi, posti, indice, numero_biglietti, importo_pagato).
Esempio di esecuzione
--- Biglietteria cinema ---
1 - Dune - 8.50 euro - posti disponibili: 12
2 - Inside Out - 7.00 euro - posti disponibili: 5
3 - Interstellar - 6.50 euro - posti disponibili: 20
0 - Esci
Scegli un film: 1
Quanti biglietti vuoi acquistare? 3
Totale da pagare: 25.50 euro
Inserisci importo pagato: 20
Pagamento insufficiente. Mancano 5.50 euro.
Inserisci importo pagato: 30
Acquisto completato: 3 biglietti per Dune.
Resto: 4.50 euro
Posti rimanenti per Dune: 9
Buona visione!
Laboratorio¶
I file di partenza contengono già le intestazioni delle funzioni. Completa prima leggi_film, poi stampa_menu, poi il ciclo in main.py.
Come ragionare sulla soluzione¶
- Leggere a blocchi di tre righe. Con
readline()si legge il titolo; finché non è la stringa vuota (fine del file) si leggono le due righe successive, convertendole confloateint, e si legge il titolo seguente. - Indici paralleli.
titoli[i],prezzi[i]eposti[i]descrivono lo stesso film. Il menu parte da 1, le liste da 0: l'indice èscelta - 1. - Due cicli
while. Il primo ripete il menu finché l'utente non sceglie0o completa un acquisto; il secondo richiede l'importo finché non è sufficiente. - Formattazione.
format(totale, '.2f')(oppure la f-stringf'{totale:.2f}') mostra sempre due decimali:25.50, non25.5. - Salvataggio opzionale. Si riapre
film.txtin modalità'w'e si riscrivono le tre righe di ogni film con i posti aggiornati.