calculator successfully updated by agent
This commit is contained in:
@@ -16,15 +16,36 @@ class Calculator:
|
|||||||
def evaluate(self, expression):
|
def evaluate(self, expression):
|
||||||
if not expression or expression.isspace():
|
if not expression or expression.isspace():
|
||||||
return None
|
return None
|
||||||
tokens = expression.strip().split()
|
tokens = self._tokenize(expression)
|
||||||
return self._evaluate_infix(tokens)
|
return self._evaluate_infix(tokens)
|
||||||
|
|
||||||
|
def _tokenize(self, expression):
|
||||||
|
# Add spaces around operators and parentheses for easy splitting
|
||||||
|
expression = (
|
||||||
|
expression.replace("(", " ( ")
|
||||||
|
.replace(")", " ) ")
|
||||||
|
.replace("+", " + ")
|
||||||
|
.replace("-", " - ")
|
||||||
|
.replace("*", " * ")
|
||||||
|
.replace("/", " / ")
|
||||||
|
)
|
||||||
|
return [token for token in expression.split() if token]
|
||||||
|
|
||||||
def _evaluate_infix(self, tokens):
|
def _evaluate_infix(self, tokens):
|
||||||
values = []
|
values = []
|
||||||
operators = []
|
operators = []
|
||||||
|
|
||||||
for token in tokens:
|
for token in tokens:
|
||||||
if token in self.operators:
|
if token == "(":
|
||||||
|
operators.append(token)
|
||||||
|
elif token == ")":
|
||||||
|
while operators and operators[-1] != "(":
|
||||||
|
self._apply_operator(operators, values)
|
||||||
|
if operators and operators[-1] == "(":
|
||||||
|
operators.pop() # Pop the opening parenthesis
|
||||||
|
else:
|
||||||
|
raise ValueError("Mismatched parentheses")
|
||||||
|
elif token in self.operators:
|
||||||
while (
|
while (
|
||||||
operators
|
operators
|
||||||
and operators[-1] in self.operators
|
and operators[-1] in self.operators
|
||||||
@@ -39,6 +60,8 @@ class Calculator:
|
|||||||
raise ValueError(f"invalid token: {token}")
|
raise ValueError(f"invalid token: {token}")
|
||||||
|
|
||||||
while operators:
|
while operators:
|
||||||
|
if operators[-1] == "(":
|
||||||
|
raise ValueError("Mismatched parentheses")
|
||||||
self._apply_operator(operators, values)
|
self._apply_operator(operators, values)
|
||||||
|
|
||||||
if len(values) != 1:
|
if len(values) != 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user