-
Notifications
You must be signed in to change notification settings - Fork 12.3k
/
calculator.py
133 lines (105 loc) · 3.22 KB
/
calculator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
Written by : Shreyas Daniel - github.com/shreydan
Description : Uses Pythons eval() function
as a way to implement calculator.
Functions available are:
--------------------------------------------
+ : addition
- : subtraction
* : multiplication
/ : division
% : percentage
e : 2.718281...
pi : 3.141592...
sine : sin(rad)
cosine : cos(rad)
exponent: x^y
tangent : tan(rad)
remainder : XmodY
square root : sqrt(n)
round to nearest integer : round(n)
convert degrees to radians : rad(deg)
absolute value : aval(n)
"""
import sys
## Imported math library to run sin(), cos(), tan() and other such functions in the calculator
from fileinfo import raw_input
def calc(term):
"""
input: term of type str
output: returns the result of the computed term.
purpose: This function is the actual calculator and the heart of the application
"""
# This part is for reading and converting function expressions.
term = term.lower()
# This part is for reading and converting arithmetic terms.
term = term.replace(" ", "")
term = term.replace("^", "**")
term = term.replace("=", "")
term = term.replace("?", "")
term = term.replace("%", "/100.00")
term = term.replace("rad", "radians")
term = term.replace("mod", "%")
term = term.replace("aval", "abs")
functions = [
"sin",
"cos",
"tan",
"pow",
"cosh",
"sinh",
"tanh",
"sqrt",
"pi",
"radians",
"e",
]
for func in functions:
if func in term:
withmath = "math." + func
term = term.replace(func, withmath)
try:
# here goes the actual evaluating.
term = eval(term)
# here goes to the error cases.
except ZeroDivisionError:
print("Can't divide by 0. Please try again.")
except NameError:
print("Invalid input. Please try again")
except AttributeError:
print("Please check usage method and try again.")
except TypeError:
print("please enter inputs of correct datatype ")
return term
def result(term):
"""
input: term of type str
output: none
purpose: passes the argument to the function calc(...) and
prints the result onto console.
"""
print("\n" + str(calc(term)))
def main():
"""
main-program
purpose: handles user input and prints
information to the console.
"""
print(
"\nScientific Calculator\n\nFor Example: sin(rad(90)) + 50% * (sqrt(16)) + round(1.42^2)"
+ "- 12mod3\n\nEnter quit to exit"
)
if sys.version_info.major >= 3:
while True:
k = input("\nWhat is ")
if k == "quit":
break
result(k)
else:
while True:
k = raw_input("\nWhat is ")
if k == "quit":
break
result(k)
if __name__ == "__main__":
main()