Boliche

Boliche

Intermedia

Instrucciones

Puntúa una partida de bowling.

El bowling es un juego en el que los jugadores lanzan una bola pesada para derribar pinos dispuestos en forma de triángulo. Escribe código para llevar la cuenta de la puntuación de una partida de bowling.

Cómo se puntúa el bowling

La partida consta de 10 entradas. Una entrada se compone de uno o dos lanzamientos de bola con 10 pinos en pie al inicializarse la entrada. Hay tres casos al calcular la puntuación de una entrada.

  • Una entrada abierta es aquella en la que se registra una puntuación menor que 10. En ese caso, la puntuación de la entrada es el número de pinos derribados.

  • Un spare es aquel en el que los diez pinos se derriban con el segundo lanzamiento. El valor total de un spare es 10 más el número de pinos derribados en su siguiente lanzamiento.

  • Un strike es aquel en el que los diez pinos se derriban con el primer lanzamiento. El valor total de un strike es 10 más el número de pinos derribados en los dos lanzamientos siguientes. Si a un strike le sigue inmediatamente otro strike, el valor del primer strike no se puede determinar hasta que se lance la bola una vez más.

Aquí tienes un ejemplo de tres entradas:

Entrada 1 Entrada 2 Entrada 3
X (strike) 5/ (spare) 9 0 (entrada abierta)

La entrada 1 es (10 + 5 + 5) = 20

La entrada 2 es (5 + 5 + 9) = 19

La entrada 3 es (9 + 0) = 9

Esto significa que el total acumulado actual es 48.

La décima entrada de la partida es un caso especial. Si alguien lanza un spare o un strike, recibe una o dos bolas extra, respectivamente. Las bolas extra existen para calcular el total de la décima entrada. Anotar un strike o un spare en la bola extra no le da al jugador más bolas extra. El valor total de la décima entrada es el número total de pinos derribados.

Para una décima entrada de X1/ (un strike y un spare), el valor total es 20.

Para una décima entrada de XXX (tres strikes), el valor total es 30.

Requisitos

Escribe código para llevar la cuenta de la puntuación de una partida de bowling. Debe admitir dos operaciones:

  • Se llama a roll(pins : int) cada vez que el jugador lanza una bola. El argumento es el número de pinos derribados.
  • Se llama a score() : int solo justo al final de la partida. Devuelve la puntuación total de esa partida.

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho a la hora de depurar. En los casos en los que sabes que el origen del error va a ser de cierto tipo, puedes optar por lanzar uno de los tipos de error incorporados, pero aun así debes incluir un mensaje significativo.

Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» un error cuando no se siguen las reglas de puntuación o de juego. Las pruebas solo pasarán si haces raise de la exception y además incluyes un mensaje con ella.

Para lanzar un ValueError con un mensaje, escribe el mensaje como un argumento 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")
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Boliche?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.