解析并计算简单的数学应用题,并返回整数答案。
不含运算的题目,其结果就是给出的那个数字。
What is 5?
结果为 5。
把两个数字相加。
What is 5 plus 13?
结果为 18。
要能处理大数和负数。
现在,来执行另外三种运算。
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
按顺序处理一组运算。
由于这些应用题是用文字表述的,请从左到右依次计算表达式,忽略通常的运算顺序。
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15(即不是 9)
解析器应当拒绝以下内容:
有时需要抛出异常。这样做时,你应该始终附上一条有意义的错误信息,说明错误的来源是什么。这能让你的代码更易读,也会大大方便调试。如果你已经知道错误来源是某种特定类型,可以选择抛出某个内置错误类型,但仍然要附上有意义的信息。
这道练习要求你使用 raise 语句,在传给answer()的问题格式错误或无效、或者包含未知运算时“抛出” ValueError。只有当你既 raise 了 exception,又给它附上一条信息,测试才会通过。
请注意:即使抛出的是同一种_错误类型_,每个场景所需的信息也不一样。
仔细查看测试。
要带着信息抛出 ValueError,请把这条信息作为实参传给 exception 类型:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
要在某个代码块内_处理_抛出的错误,可以使用 try-except。
try-except 块会“包裹”可能出错的代码,把所有异常映射到一个错误、多个错误,或者映射到其他用来处理问题的代码片段:
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")