diff --git a/calculator.py b/calculator.py
index a46affd..54396e7 100644
--- a/calculator.py
+++ b/calculator.py
@@ -37,48 +37,87 @@
that explains how to perform calculations.
* Commit and push your changes to your fork.
* Submit a link to your Session03 fork repository!
-
-
"""
-
+import traceback
+
+def home():
+ """ Returns a home page with information for using the calculator """
+ home_str = """
+ Here's how to use this page:
+ Enter the type of operation, then enter in n1 and n2 separating each
+ item with a backlash.
+ Please use the example below.
+
+ Examples:
+ Addition: http://localhost:8080/add/n1/n2
+ Subtraction: http://localhost:8080/subtract/n1/n2
+ Multiplication: http://localhost:8080/multiply/n1/n2
+ Division: http://localhost:8080/divide/n1/n2
+ """
+ return home_str
def add(*args):
""" Returns a STRING with the sum of the arguments """
-
- # TODO: Fill sum with the correct value, based on the
- # args provided.
- sum = "0"
-
- return sum
-
-# TODO: Add functions for handling more arithmetic operations.
+ sum = int(args[0]) + int(args[1])
+ sum_str = f"The sum is {sum}."
+ return sum_str
+
+def subtract(*args):
+ """ Returns a STRING with the difference of the arguments """
+ dif = int(args[0]) - int(args[1])
+ dif_str = f"The difference is {dif}."
+ return dif_str
+
+def multiply(*args):
+ """ Returns a STRING with the product of the arguments """
+ pro = int(args[0]) * int(args[1])
+ pro_str = f"The product is {pro}."
+ return pro_str
+
+def divide(*args):
+ """ Returns a STRING with the quotient of the arguments """
+ quo = int(args[0]) / int(args[1])
+ quo_str = f"The product is {quo}."
+ return quo_str
def resolve_path(path):
"""
Should return two values: a callable and an iterable of
arguments.
"""
-
- # TODO: Provide correct values for func and args. The
- # examples provide the correct *syntax*, but you should
- # determine the actual values of func and args using the
- # path.
- func = add
- args = ['25', '32']
-
+ funcs = {"": home, "add": add, "subtract": subtract, "multiply": multiply, "divide": divide}
+ path = path.strip('/').split('/')
+ func_name = path[0]
+ args = path[1:]
+
+ try:
+ func = funcs[func_name]
+ except KeyError:
+ raise NameError
return func, args
def application(environ, start_response):
- # TODO: Your application code from the book database
- # work here as well! Remember that your application must
- # invoke start_response(status, headers) and also return
- # the body of the response in BYTE encoding.
- #
- # TODO (bonus): Add error handling for a user attempting
- # to divide by zero.
- pass
+ headers = [("Content-type", "text/html")]
+ try:
+ path = environ.get('PATH_INFO', None)
+ if path is None:
+ raise NameError
+ func, args = resolve_path(path)
+ body = func(*args)
+ status = "200 OK"
+ except NameError:
+ status = "404 Not Found"
+ body = "