Продвинутый калькулятор на python

Продолжаю делать калькулятор, уже оформил его в стиле ооп, но он почему то перестал считать. Т.е я даю ему простой пример 6+4/2,а нужно чтобы выводил 8, он выводит 6. Я дал ему пример -6+4/2(должно быть -4), он вывел "-". Помогите понять, что не так?

# Сделано RedFoxMain 
 # Github https://github.com/RedFoxMain 
import re 
  
class Calc: 
      
    def tokinizer(self,expression): 
        self.expression = expression 
        tokens = re.split(r'(\^|\+|\-|\*|\/|\(|\))', expression) 
        tokens = [t.strip() for t in tokens if t.strip()] 
          
        if "(" in tokens: 
            opening_index = tokens.index("(") 
            closing_index = None 
            brackets_count = 0 
              
             # ищем закрывающую скобку 
            for i in range(opening_index, len(tokens)): 
             if tokens[i] == "(": 
                 brackets_count += 1 
             elif tokens[i] == ")": 
                 brackets_count -= 1 
             if brackets_count == 0: 
                 closing_index = i 
                 break 
              
             # получаем токены внутри скобок и обрабатываем их 
             inner_tokens = tokens[opening_index+1: closing_index] 
             inner_result = self.parser(inner_tokens) 
              
             # удаляем скобки и их содержимое, добавляем результат 
             tokens = tokens[:opening_index] + [inner_result] + tokens[closing_index+1:] 
              
             # рекурсивно вызываем функцию для незаконченного выражения 
             return self.tokinizer(" ".join(tokens)) 
              
        else: 
             # обрабатываем токены без скобок 
             return self.parser(tokens) 
      
              
    def parser(self, tokens): 
         self.tokens = tokens 
         while len(tokens) > 1: 
             try: 
                 if "/" in tokens: 
                     try: 
                         operator_index = tokens.index("/") 
                         left_num = float(tokens[operator_index-1]) 
                         right_num = float(tokens[operator_index+1]) 
                         res = left_num / right_num 
                         tokens = tokens[:operator_index-1] + [str(res)] + tokens[operator_index+2:] 
                     except ZeroDivisionError: 
                         print("На ноль делить нельзя") 
                         break 
                 elif "*" in tokens: 
                     operator_index = tokens.index("*") 
                     left_num = float(tokens[operator_index-1]) 
                     right_num = float(tokens[operator_index+1]) 
                     res = left_num * right_num 
                     tokens = tokens[:operator_index-1] + [str(res)] + tokens[operator_index+2:] 
                     
                 elif "^" in tokens: 
                     operator_index = tokens.index("^") 
                     left_num = int(tokens[operator_index-1]) 
                     right_num = int(tokens[operator_index+1]) 
                     res = left_num ** right_num 
                     tokens = tokens[:operator_index-1] + [str(res)] + tokens[operator_index+2:] 
                          
                        
                 elif "+" in tokens: 
                     operator_index = tokens.index("+") 
                     left_num = float(tokens[operator_index-1]) 
                     right_num = float(tokens[operator_index+1]) 
                     res = left_num + right_num 
                     tokens = tokens[:operator_index-1] + [str(res)] + tokens[operator_index+2:] 
                      
                 elif "-" in tokens: 
                     operator_index = tokens.index("-") 
                     left_num = float(tokens[operator_index-1]) 
                     right_num = float(tokens[operator_index+1]) 
                     res = left_num - right_num 
                     tokens = tokens[:operator_index-1] + [str(res)] + tokens[operator_index+2:] 
                 return tokens[0] 
             except ValueError: 
                 print("Ты точно цифры написал?") 
                 break


obj = Calc()
result = obj.tokinizer("6+4/2")
print(result)

Ответы (0 шт):