1+ from Calculator import calculate # import a class module I wrote in Calculator.py called calculate
2+
3+ signs = { # A dictionary to store signs according to user choices from menu
4+ 1 :'+' ,
5+ 2 :'-' ,
6+ 3 :'x' ,
7+ 4 :'/'
8+ }
9+
10+ def display_menu (): # A method to display menu options to users
11+ print (
12+ '''---Menu---
13+ 1. Addition
14+ 2. Subtraction
15+ 3. Multiplication
16+ 4. Division
17+ 5. Quit
18+
19+ '''
20+ )
21+ accept_user_choice () # Calling a function that accepts user menu choices.
22+
23+ def accept_user_choice (): # A Method to accept user choices
24+
25+ user_choice = input ('Enter a choice from (1 - 5): ' ) # a prompt variable to accept user choice and store them as string
26+
27+ if user_choice .isdigit (): # a condition to check if the user choice is a digit or not.
28+ user_choice = int (user_choice ) # converting user choices from str to int after being a digit
29+ validate_user_choice (user_choice ) # calling the validation method to validate if user choice is true.
30+
31+ else : # An else statement to prompt errors
32+ print ('Invalid user choice...' )
33+ accept_user_choice () # using recursion method to run this method to re-accept the user choice till conditions are met
34+
35+
36+
37+
38+ def validate_user_choice (choice ): # a method to validate user choices for the menu options
39+ if 0 < choice < 5 : # choices from users should be from (1 - 5) but 5 is an exception to quit the program
40+ display_results (choice ) # display results after conditions are met
41+
42+
43+ elif choice == 5 : # quit the program if a uer choice is 5
44+ print ('Quiting...' )
45+ quit ()
46+
47+ else : # a prompt condition to alert users to enter a choice from 1-5
48+ print ('Choice must be from 1 - 5' )
49+ accept_user_choice () # calling this method to accept new user choices
50+
51+ def assign_user_choice_to_menu_option (x , y ,choice ): # a method to assign various choices to appropriate calculations
52+
53+ cal = calculate (x , y ) # creating an object for the class calculate to be used in calling various class methods.
54+
55+ if choice == 1 :
56+ return cal .add ()
57+ elif choice == 2 :
58+ return cal .sub ()
59+ elif choice == 3 :
60+ return cal .mul ()
61+ else :
62+ return cal .div ()
63+
64+
65+ def accept_values (): # A method to accept user values for calculations
66+
67+ x = input ('Enter value 1: ' )
68+ y = input ('Enter value 2: ' )
69+
70+ if (x and y ).isdigit (): # Checking if valuses are digit then it's converted into float
71+ x = float (x )
72+ y = float (y )
73+
74+ else : # a case where values are not digits
75+ print ('Please enter a digit / a number... ' )
76+ accept_values ()
77+ return x , y
78+
79+ def display_results (choice ):# method to display the answer
80+ x , y = accept_values ()
81+
82+ answer = assign_user_choice_to_menu_option (x , y , choice ) # calling this method to assign user choice to right menu option
83+
84+ for key , pair in signs .items (): # using a for loop to print the answer with the appropriate sign
85+ if key == choice :
86+ print (f'{ x } { pair } { y } = { answer } ' )
87+
88+
89+
90+
91+
92+ def main (): # main loop
93+ print ('--Calculator--' )
94+ while True :
95+ display_menu () # calling this function to start the process
96+
97+ again = input ('Do you want to continue (n / y): ' ).lower () # a prompt to ask users for continuation
98+ if again != 'y' :
99+ quit ()
100+ break
101+ else :
102+ print (' ' )
103+
104+
105+ if __name__ == '__main__' : # running from the mainloop...
106+ main ()
107+
108+ #mMabiaa
0 commit comments