Analiza y evalúa problemas verbales de matemáticas sencillos y devuelve la respuesta como un número entero.
Los problemas que no tienen operaciones se evalúan simplemente como el número dado.
What is 5?
Se evalúa como 5.
Suma dos números.
What is 5 plus 13?
Se evalúa como 18.
Maneja números grandes y números negativos.
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
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)
El analizador debe rechazar:
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")
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.