Bowling

Bowling

Medio

Istruzioni

Assegna il punteggio a una partita di bowling.

Il bowling è un gioco in cui i giocatori lanciano una palla pesante per abbattere dei birilli disposti a triangolo. Scrivi il codice per tenere traccia del punteggio di una partita di bowling.

Come si calcola il punteggio

La partita è composta da 10 frame. Un frame è formato da uno o due lanci della palla, con 10 birilli in piedi all'inizio del frame. Ci sono tre casi per il calcolo del punteggio di un frame.

  • Un frame aperto è un frame in cui si registra un punteggio inferiore a 10. In questo caso il punteggio del frame è il numero di birilli abbattuti.

  • Uno spare è un frame in cui tutti e dieci i birilli vengono abbattuti con il secondo lancio. Il valore totale di uno spare è 10 più il numero di birilli abbattuti nel lancio successivo.

  • Uno strike è un frame in cui tutti e dieci i birilli vengono abbattuti con il primo lancio. Il valore totale di uno strike è 10 più il numero di birilli abbattuti nei due lanci successivi. Se a uno strike segue immediatamente un secondo strike, il valore del primo strike non può essere determinato finché la palla non viene lanciata un'altra volta.

Ecco un esempio con tre frame:

Frame 1 Frame 2 Frame 3
X (strike) 5/ (spare) 9 0 (frame aperto)

Il frame 1 è (10 + 5 + 5) = 20

Il frame 2 è (5 + 5 + 9) = 19

Il frame 3 è (9 + 0) = 9

Questo significa che il totale corrente è 48.

Il decimo frame è un caso speciale. Se si fa uno spare o uno strike, si ottengono rispettivamente uno o due tiri supplementari. I tiri supplementari servono a calcolare il totale del decimo frame. Fare strike o spare con il tiro supplementare non dà al giocatore altri tiri supplementari. Il valore totale del decimo frame è il numero totale di birilli abbattuti.

Per un decimo frame di X1/ (strike e spare), il valore totale è 20.

Per un decimo frame di XXX (tre strike), il valore totale è 30.

Requisiti

Scrivi il codice per tenere traccia del punteggio di una partita di bowling. Deve supportare due operazioni:

  • roll(pins : int) viene chiamata ogni volta che il giocatore lancia la palla. L'argomento è il numero di birilli abbattuti.
  • score() : int viene chiamata solo alla fine della partita. Restituisce il punteggio totale di quella partita.

Messaggi delle eccezioni

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti includere sempre un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta notevolmente il debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.

Questo esercizio in particolare richiede di usare l'istruzione raise per «lanciare» un errore quando le regole di punteggio o di gioco non vengono rispettate. I test passeranno solo se usi raise sull'exception e ci alleghi un messaggio.

Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:

# example when a bonus is attempted with an open frame
raise IndexError("cannot throw bonus with an open tenth frame")

# example when fill balls are invalid
raise ValueError("invalid fill balls")
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Bowling?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.