Wordy

Wordy

Fácil

Instrucciones

Analiza y evalúa problemas matemáticos sencillos planteados con palabras y devuelve la respuesta como un número entero.

Iteración 0: números

Los problemas sin operaciones se evalúan simplemente al número dado.

What is 5?

Se evalúa a 5.

Iteración 1: suma

Suma dos números.

What is 5 plus 13?

Se evalúa a 18.

Admite números grandes y números negativos.

Iteración 2: resta, multiplicación y división

Ahora, realiza las otras tres operaciones.

What is 7 minus 5?

2

What is 6 multiplied by 4?

24

What is 25 divided by 5?

5

Iteración 3: varias operaciones

Resuelve un conjunto de operaciones, en secuencia.

Como estos problemas están planteados con palabras, evalúa la expresión de izquierda a derecha, ignorando el orden de operaciones habitual.

What is 5 plus 13 plus 6?

24

What is 3 plus 2 multiplied by 3?

15 (es decir, no 9)

Iteración 4: errores

El analizador debe rechazar:

  • Operaciones no admitidas ("What is 52 cubed?")
  • Preguntas que no son de matemáticas ("Who is the President of the United States")
  • Problemas planteados con palabras y con una sintaxis no válida ("What is 1 plus plus 2?")

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, deberías incluir siempre 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 situaciones en las que sepas que el origen del error va a ser de un tipo determinado, puedes optar por lanzar uno de los tipos de error integrados, pero aun así deberías incluir un mensaje significativo.

Este ejercicio en concreto requiere que uses la instrucción raise para «lanzar» un ValueError si la pregunta que se pasa a answer() está mal formada o no es válida, o si contiene una operación desconocida. Las pruebas solo pasarán si lanzas la exception con raise e incluyes un mensaje con ella. Ten en cuenta: el mensaje necesario es distinto para cada escenario, aunque se lance el mismo tipo de error. Revisa las pruebas con atención.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:

# if the question contains an unknown operation.
raise ValueError("unknown operation")

# if the question is malformed or invalid.
raise ValueError("syntax error")

Para gestionar un error lanzado dentro de un bloque de código concreto, se puede usar un try-except. Los bloques try-except «envuelven» el código que podría causar un error, y asocian todas las excepciones a un único error, a varios errores u otros fragmentos de código con los que resolver el problema:

while len(equation) > 1:
        try:
           # The questionable/error-prone code goes here,in an indented block
           # It can contain statements, loops, if-else blocks, or other executable code.
           x_value, operation, y_value, *rest = equation
           ...
           ...

        except:
            # Code for what to do when an error gets thrown in the code above.
            # This could be one error, or more complicated logging, error checking and messaging.
            raise ValueError("syntax error")
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar Wordy?

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