Как заставить этот калькулятор работать со скобками?
Я написал этот калькулятор для +,-,/,* и пытаюсь применить к нему функцию ().
например: 5+(3*2(2+3))
Это калькулятор, который я написал, который отлично работает без скобок:
class Node(object): def __init__(self, kappa): i = -1 if kappa.rfind("+") != -1: i = kappa.rfind("+") elif kappa.rfind("-") != -1: i = kappa.rfind("-") elif kappa.rfind("*") != -1: i = kappa.rfind("*") elif kappa.rfind("/") != -1: i = kappa.rfind("/") if i != -1: self.data = kappa[i] self.left = Node(kappa[:i]) self.right = Node(kappa[i + 1:]) else: self.data = float(kappa) self.left = None self.right = None def calculate(self): if self.data == "+": return self.left.calculate() + self.right.calculate() elif self.data == "-": return self.left.calculate() - self.right.calculate() elif self.data == "*": return self.left.calculate() * self.right.calculate() elif self.data == "/": return self.left.calculate() / self.right.calculate() else: return self.data
Что я уже пробовал:
Я не совсем уверен, где находится идеальное место для реализации скобки здесь, должен ли я создать новый метод или добавить его в часть __init__ method?
Я написал эту функцию, которая изменяет значения, ограниченные скобками, на $:
<pre>def parenthesis_replace(kappa): s = "" level = 0 for c in kappa: if c == "(": level += 1 if level > 0: s += "$" else: s += c if c == ")": level -= 1 return s print parenthesis_replace("(1-2)-3")
Я получаю :
$$$$$-3
И это прекрасно работает по назначению, я подумал, что, возможно, я могу использовать это, чтобы пренебречь значениями между двумя скобками, пока я не найду операторы вне них и не помещу остальные в левый или правый узел соответственно. Но я все еще очень запутался, как это сделать, перепробовал много способов, но всегда застревал.
Кроме того, мне пришло в голову, что таким образом, если скобки находятся между всеми входными данными, то он ничего не вычисляет.
Любые намеки или советы очень ценятся
Member 13814092
Вот как вы вызываете эту функцию :
калькулятор дефа(узел):
обратный узел.вычислить()
калькулятор печати(узел("5+(3*2(2+3))"))