calculator successfully updated by agent

This commit is contained in:
2026-03-31 18:49:37 +02:00
parent ea582b77e4
commit bd62d666b6
+25 -2
View File
@@ -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: