Bolos

Bolos

Media

Instrucciones

Puntúa una partida de bolos.

Los bolos son un juego en el que los jugadores lanzan una bola pesada para derribar unos bolos dispuestos en triángulo. Escribe código para llevar la cuenta de la puntuación de una partida de bolos.

Cómo se puntúa en los bolos

La partida consta de 10 turnos. Un turno se compone de una o dos tiradas, con 10 bolos en pie al iniciarse el turno. Hay tres casos a la hora de calcular la puntuación de un turno.

  • Un turno abierto es aquel en el que se registra una puntuación inferior a 10. En este caso, la puntuación del turno es el número de bolos derribados.

  • Un semipleno se da cuando se derriban los diez bolos con la segunda tirada. El valor total de un semipleno es 10 más el número de bolos derribados en la siguiente tirada.

  • Un pleno se da cuando se derriban los diez bolos con la primera tirada. El valor total de un pleno es 10 más el número de bolos derribados en las dos tiradas siguientes. Si a un pleno le sigue inmediatamente otro pleno, el valor del primer pleno no puede determinarse hasta que se lance la bola una vez más.

Aquí tienes un ejemplo de tres turnos:

Turno 1 Turno 2 Turno 3
X (pleno) 5/ (semipleno) 9 0 (turno abierto)

El turno 1 es (10 + 5 + 5) = 20

El turno 2 es (5 + 5 + 9) = 19

El turno 3 es (9 + 0) = 9

Esto significa que el total acumulado actual es 48.

El décimo turno de la partida es un caso especial. Si alguien hace un semipleno o un pleno, obtiene una o dos bolas de relleno, respectivamente. Las bolas de relleno sirven para calcular el total del décimo turno. Hacer un pleno o un semipleno con la bola de relleno no da al jugador más bolas de relleno. El valor total del décimo turno es el número total de bolos derribados.

Para un décimo turno de X1/ (un pleno y un semipleno), el valor total es 20.

Para un décimo turno de XXX (tres plenos), el valor total es 30.

Requisitos

Escribe código para llevar la cuenta de la puntuación de una partida de bolos. 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 bolos derribados.
  • Se llama a score() : int solo al final del todo 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 para indicar cuál es el origen del error. Esto hace que tu código sea más legible y ayuda en gran medida a la depuración. En situaciones en las que sabes que el origen del error será de un tipo concreto, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.

Este ejercicio en concreto requiere que uses la instrucción raise para «lanzar» un error cuando no se siguen las reglas de puntuación o de juego. Las pruebas solo pasarán si tanto lanzas la exception con raise como incluyes un mensaje con ella.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento para el 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 pestaña nueva
Python Exercism

¿Listo para empezar Bolos?

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