Files
School/Anul 1/Semestrul 1/Fundamentals of Programming/FP/src/lecture/live/lecture_06.py
T
2024-08-31 12:07:21 +03:00

89 lines
1.7 KiB
Python

"""
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()