School Commit Init
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
Create a calculator program for rational numbers with the following functionalities:
|
||||
+ add a rational number to the calculator
|
||||
u undo the last operation
|
||||
x exit
|
||||
"""
|
||||
from math import gcd
|
||||
|
||||
|
||||
# ----------------------#
|
||||
# Non-UI functions here #
|
||||
# ----------------------#
|
||||
|
||||
def create_q(num, den: int = 1):
|
||||
"""
|
||||
Create Rational number
|
||||
:param num:
|
||||
:param den:
|
||||
:return: The number, or None if number is invalid
|
||||
"""
|
||||
if den == 0:
|
||||
return None
|
||||
# return [num, den]
|
||||
return {"num": num, "den": den}
|
||||
|
||||
|
||||
def get_num(q):
|
||||
# return q[0]
|
||||
return q["num"]
|
||||
|
||||
|
||||
def get_den(q):
|
||||
# return q[1]
|
||||
return q["den"]
|
||||
|
||||
|
||||
def add_q(q1, q2):
|
||||
num = get_num(q1) * get_den(q2) + get_num(q2) * get_den(q1)
|
||||
den = get_den(q1) * get_den(q2)
|
||||
g = gcd(num, den)
|
||||
return create_q(num // g, den // g)
|
||||
|
||||
|
||||
def to_str(q):
|
||||
if get_den(q) == 1:
|
||||
return str(get_num(q))
|
||||
return str(get_num(q)) + "/" + str(get_den(q))
|
||||
|
||||
|
||||
# -----------------------#
|
||||
# Only UI functions here #
|
||||
# -----------------------#
|
||||
|
||||
def add_rational(total):
|
||||
num = int(input("enter numerator:"))
|
||||
den = int(input("enter denominator:"))
|
||||
|
||||
q = create_q(num, den)
|
||||
if q is None:
|
||||
print("Invalid rational number")
|
||||
return
|
||||
|
||||
return add_q(q, total)
|
||||
|
||||
|
||||
def print_menu():
|
||||
print("+ add a rational number to the calculator")
|
||||
print("u undo the last operation")
|
||||
print("x exit")
|
||||
|
||||
|
||||
def start():
|
||||
total = create_q(0)
|
||||
while True:
|
||||
print_menu()
|
||||
print("Total: " + to_str(total))
|
||||
opt = input(">")
|
||||
|
||||
if opt == "+":
|
||||
total = add_rational(total)
|
||||
elif opt == "x":
|
||||
break
|
||||
else:
|
||||
print("Bad user option")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
start()
|
||||
Reference in New Issue
Block a user