Vai al contenuto

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

  1. 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 con float e int, e si legge il titolo seguente.
  2. Indici paralleli. titoli[i], prezzi[i] e posti[i] descrivono lo stesso film. Il menu parte da 1, le liste da 0: l'indice è scelta - 1.
  3. Due cicli while. Il primo ripete il menu finché l'utente non sceglie 0 o completa un acquisto; il secondo richiede l'importo finché non è sufficiente.
  4. Formattazione. format(totale, '.2f') (oppure la f-string f'{totale:.2f}') mostra sempre due decimali: 25.50, non 25.5.
  5. Salvataggio opzionale. Si riapre film.txt in modalità 'w' e si riscrivono le tre righe di ogni film con i posti aggiornati.