Movie theater (refactoring)
Level: Intermediate (score: 3)
Refactor the code from invoice_to_be_refactored
inside invoice_refactored
and make it more readable. Currently the function exhibits the infamous Arrow anti pattern.
Remember from the Zen of Python: flat is better than nested, so try to flatten it with the following techniques:
To summarize the code:
- If 0 tickets raise a ValueError
- If the movie passed into the function does not match any movies in available_movies
raise a LookupError
- For the matching movie get the discount
and price
:
- discount
= 10
if you buy 5
or more tickets
- price = 12
if the quality is IMAX
else 10
- Calculate and return the price
= tickets * price - discount
Note: there is no single correct solution for this exercise. The goal is to get more familiar with refactoring techniques.