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