Wordy

Wordy

Fácil

Instrucciones

Analiza y evalúa problemas verbales de matemáticas sencillos y devuelve la respuesta como un número entero.

Iteración 0: números

Los problemas que no tienen operaciones se evalúan simplemente como el número dado.

What is 5?

Se evalúa como 5.

Iteración 1: suma

Suma dos números.

What is 5 plus 13?

Se evalúa como 18.

Maneja 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

Maneja un conjunto de operaciones, en secuencia.

Como estos son problemas verbales, 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 verbales con 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, 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 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 igual debes incluir un mensaje significativo.

Este ejercicio en particular requiere que uses la sentencia raise para «lanzar» un ValueError si la pregunta que se le pasa a answer() está mal formada o no es válida, o si contiene una operación desconocida. Las pruebas solo pasarán si tanto haces raise de la exception como incluyes un mensaje con ella. Ten en cuenta: el mensaje que se necesita es distinto en 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 de la exception:

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

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

Para manejar un error lanzado dentro de un bloque de código determinado, puedes usar un try-except. Los bloques try-except «envuelven» el código que podría llegar a causar un error, y asignan todas las excepciones a un solo error, a varios errores o a otras partes de código que se encarguen del 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 una pestaña nuevas
Python Exercism

¿Todo listo para empezar Wordy?

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