Exceptions: Exercises and Solutions
An interactive calculator
Exercise
You're going to write an interactive calculator! User input is assumed to be a formula that consist of a number, an operator (at least +
and -
), and another number, separated by white space (e.g. 1 + 1
). Split user input using str.split()
, and check whether the resulting list
is valid:
- If the input does not consist of 3 elements, raise a
FormulaError
, which is a customException
. - Try to convert the first and third input to a
float
(like so:float_value = float(str_value)
). Catch anyValueError
that occurs, and instead raise aFormulaError
- If the second input is not
'+'
or'-'
, again raise aFormulaError
If the input is valid, perform the calculation and print out the result. The user is then prompted to provide new input, and so on, until the user enters quit
.
An interaction could look like this:
>>> 1 + 1
2.0
>>> 3.2 - 1.5
1.7000000000000002
>>> quit
Solution
class FormulaError(Exception): pass
def parse_input(user_input):
input_list = user_input.split()
if len(input_list) != 3:
raise FormulaError('Input does not consist of three elements')
n1, op, n2 = input_list
try:
n1 = float(n1)
n2 = float(n2)
except ValueError:
raise FormulaError('The first and third input value must be numbers')
return n1, op, n2
def calculate(n1, op, n2):
if op == '+':
return n1 + n2
if op == '-':
return n1 - n2
if op == '*':
return n1 * n2
if op == '/':
return n1 / n2
raise FormulaError('{0} is not a valid operator'.format(op))
while True:
user_input = input('>>> ')
if user_input == 'quit':
break
n1, op, n2 = parse_input(user_input)
result = calculate(n1, op, n2)
print(result)
Output:
>>> 1 + 1
2.0
>>> 3.2 - 1.5
1.7000000000000002
>>> quit
You're done with this section!
Continue with Exceptions >>