calculator successfully updated by agent
This commit is contained in:
@@ -16,15 +16,36 @@ class Calculator:
|
||||
def evaluate(self, expression):
|
||||
if not expression or expression.isspace():
|
||||
return None
|
||||
tokens = expression.strip().split()
|
||||
tokens = self._tokenize(expression)
|
||||
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):
|
||||
values = []
|
||||
operators = []
|
||||
|
||||
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 (
|
||||
operators
|
||||
and operators[-1] in self.operators
|
||||
@@ -39,6 +60,8 @@ class Calculator:
|
||||
raise ValueError(f"invalid token: {token}")
|
||||
|
||||
while operators:
|
||||
if operators[-1] == "(":
|
||||
raise ValueError("Mismatched parentheses")
|
||||
self._apply_operator(operators, values)
|
||||
|
||||
if len(values) != 1:
|
||||
|
||||
Reference in New Issue
Block a user