diff --git a/calc.py b/calc.py index 758bc87..f972eff 100644 --- a/calc.py +++ b/calc.py @@ -1,167 +1,33 @@ -import tkinter as tk - -LARGE_FONT_STYLE = ("Arial", 40, "bold") -SMALL_FONT_STYLE = ("Arial", 16) -DIGITS_FONT_STYLE = ("Arial", 24, "bold") -DEFAULT_FONT_STYLE = ("Arial", 20) - -OFF_WHITE = "#F8FAFF" -WHITE = "#FFFFFF" -LIGHT_BLUE = "#CCEDFF" -LIGHT_GRAY = "#F5F5F5" -LABEL_COLOR = "#25265E" - - -class Calculator: - def __init__(self): - self.window = tk.Tk() - self.window.geometry("375x667") - self.window.resizable(0, 0) - self.window.title("Calculator") - - self.total_expression = "" - self.current_expression = "" - self.display_frame = self.create_display_frame() - - self.total_label, self.label = self.create_display_labels() - - self.digits = { - 7: (1, 1), 8: (1, 2), 9: (1, 3), - 4: (2, 1), 5: (2, 2), 6: (2, 3), - 1: (3, 1), 2: (3, 2), 3: (3, 3), - 0: (4, 2), '.': (4, 1) - } - self.operations = {"/": "\u00F7", "*": "\u00D7", "-": "-", "+": "+"} - self.buttons_frame = self.create_buttons_frame() - - self.buttons_frame.rowconfigure(0, weight=1) - for x in range(1, 5): - self.buttons_frame.rowconfigure(x, weight=1) - self.buttons_frame.columnconfigure(x, weight=1) - self.create_digit_buttons() - self.create_operator_buttons() - self.create_special_buttons() - self.bind_keys() - - def bind_keys(self): - self.window.bind("", lambda event: self.evaluate()) - for key in self.digits: - self.window.bind(str(key), lambda event, digit=key: self.add_to_expression(digit)) - - for key in self.operations: - self.window.bind(key, lambda event, operator=key: self.append_operator(operator)) - - def create_special_buttons(self): - self.create_clear_button() - self.create_equals_button() - self.create_square_button() - self.create_sqrt_button() - - def create_display_labels(self): - total_label = tk.Label(self.display_frame, text=self.total_expression, anchor=tk.E, bg=LIGHT_GRAY, - fg=LABEL_COLOR, padx=24, font=SMALL_FONT_STYLE) - total_label.pack(expand=True, fill='both') - - label = tk.Label(self.display_frame, text=self.current_expression, anchor=tk.E, bg=LIGHT_GRAY, - fg=LABEL_COLOR, padx=24, font=LARGE_FONT_STYLE) - label.pack(expand=True, fill='both') - - return total_label, label - - def create_display_frame(self): - frame = tk.Frame(self.window, height=221, bg=LIGHT_GRAY) - frame.pack(expand=True, fill="both") - return frame - - def add_to_expression(self, value): - self.current_expression += str(value) - self.update_label() - - def create_digit_buttons(self): - for digit, grid_value in self.digits.items(): - button = tk.Button(self.buttons_frame, text=str(digit), bg=WHITE, fg=LABEL_COLOR, font=DIGITS_FONT_STYLE, - borderwidth=0, command=lambda x=digit: self.add_to_expression(x)) - button.grid(row=grid_value[0], column=grid_value[1], sticky=tk.NSEW) - - def append_operator(self, operator): - self.current_expression += operator - self.total_expression += self.current_expression - self.current_expression = "" - self.update_total_label() - self.update_label() - - def create_operator_buttons(self): - i = 0 - for operator, symbol in self.operations.items(): - button = tk.Button(self.buttons_frame, text=symbol, bg=OFF_WHITE, fg=LABEL_COLOR, font=DEFAULT_FONT_STYLE, - borderwidth=0, command=lambda x=operator: self.append_operator(x)) - button.grid(row=i, column=4, sticky=tk.NSEW) - i += 1 - - def clear(self): - self.current_expression = "" - self.total_expression = "" - self.update_label() - self.update_total_label() - - def create_clear_button(self): - button = tk.Button(self.buttons_frame, text="C", bg=OFF_WHITE, fg=LABEL_COLOR, font=DEFAULT_FONT_STYLE, - borderwidth=0, command=self.clear) - button.grid(row=0, column=1, sticky=tk.NSEW) - - def square(self): - self.current_expression = str(eval(f"{self.current_expression}**2")) - self.update_label() - - def create_square_button(self): - button = tk.Button(self.buttons_frame, text="x\u00b2", bg=OFF_WHITE, fg=LABEL_COLOR, font=DEFAULT_FONT_STYLE, - borderwidth=0, command=self.square) - button.grid(row=0, column=2, sticky=tk.NSEW) - - def sqrt(self): - self.current_expression = str(eval(f"{self.current_expression}**0.5")) - self.update_label() - - def create_sqrt_button(self): - button = tk.Button(self.buttons_frame, text="\u221ax", bg=OFF_WHITE, fg=LABEL_COLOR, font=DEFAULT_FONT_STYLE, - borderwidth=0, command=self.sqrt) - button.grid(row=0, column=3, sticky=tk.NSEW) - - def evaluate(self): - self.total_expression += self.current_expression - self.update_total_label() - try: - self.current_expression = str(eval(self.total_expression)) - - self.total_expression = "" - except Exception as e: - self.current_expression = "Error" - finally: - self.update_label() - - def create_equals_button(self): - button = tk.Button(self.buttons_frame, text="=", bg=LIGHT_BLUE, fg=LABEL_COLOR, font=DEFAULT_FONT_STYLE, - borderwidth=0, command=self.evaluate) - button.grid(row=4, column=3, columnspan=2, sticky=tk.NSEW) - - def create_buttons_frame(self): - frame = tk.Frame(self.window) - frame.pack(expand=True, fill="both") - return frame - - def update_total_label(self): - expression = self.total_expression - for operator, symbol in self.operations.items(): - expression = expression.replace(operator, f' {symbol} ') - self.total_label.config(text=expression) - - def update_label(self): - self.label.config(text=self.current_expression[:11]) - - def run(self): - self.window.mainloop() - - -if __name__ == "__main__": - calc = Calculator() - calc.run() +# Function for addition +def add(x, y): + return x + y + +# Function for subtraction +def subtract(x, y): + return x - y + +# Main program loop +while True: + # Ask the user for operation + print("Select operation:") + print("1. Add") + print("2. Subtract") + print("3. Exit") + + choice = input("Enter choice (1/2/3): ") + + if choice == '3': + print("Exiting the program...") + break + + # Get user input for numbers + num1 = float(input("Enter first number: ")) + num2 = float(input("Enter second number: ")) + + # Perform the selected operation + if choice == '1': + print(f"{num1} + {num2} = {add(num1, num2)}") + elif choice == '2': + print(f"{num1} - {num2} = {subtract(num1, num2)}") + else: + print("Invalid input. Please try again.")