Python

Помогите пожалуйста написать код

Напишите программу на питоне, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «-», «*» и «/»). Выражение вводится как символьная строка, все числа целые. Операция «/» выполняется как целочисленное деление. Пример: Введите выражение: 12*3+45 Ответ: 81 Функцию eval и методы split и replace не использовать!
Лучший ответ
def calculate_expression(expression): # Функция для выполнения операции def apply_operation(a, b, op): if op == '+': return a + b elif op == '-': return a - b elif op == '*': return a * b elif op == '/': return a // b # Целочисленное деление else: raise ValueError("Неизвестная операция") # Функция для определения приоритета операции def precedence(op): if op in ('+', '-'): return 1 if op in ('*', '/'): return 2 return 0 # Разбор выражения i = 0 numbers = [] operators = [] while i < len(expression): if expression[i].isdigit(): num = 0 while i < len(expression) and expression[i].isdigit(): num = num * 10 + int(expression[i]) i += 1 numbers.append(num) elif expression[i] in ('+', '-', '*', '/'): while (operators and precedence(operators[-1]) >= precedence(expression[i])): b = numbers.pop() a = numbers.pop() op = operators.pop() numbers.append(apply_operation(a, b, op)) operators.append(expression[i]) i += 1 else: i += 1 # Выполнение оставшихся операций while operators: b = numbers.pop() a = numbers.pop() op = operators.pop() numbers.append(apply_operation(a, b, op)) return numbers[0] # Ввод выражения expression = input("Введите выражение: ") # Вычисление и вывод результата result = calculate_expression(expression) print("Ответ:", result)
Остальные ответы
Вариант с постфиксным преобразованием (можно использовать круглые скобки), например: 2*(3+3)/6-1
 import re 
 
def infix_to_postfix(expression): 
    precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0, ')': 0} 
    output = [] 
    operators = [] 
    tokens = re.findall(r'\d+|[+\-*/()]', expression) 
     
    for token in tokens: 
        if token.isdigit(): 
            output.append(token) 
        elif token == '(': 
            operators.append(token) 
        elif token == ')': 
            while operators and operators[-1] != '(': 
                output.append(operators.pop()) 
            operators.pop() 
        else: 
            while (operators and precedence[operators[-1]] >= precedence[token]): 
                output.append(operators.pop()) 
            operators.append(token) 
     
    while operators: 
        output.append(operators.pop()) 
     
    return output 
 
def evaluate_postfix(postfix): 
    stack = [] 
    for token in postfix: 
        if token.isdigit(): 
            stack.append(int(token)) 
        else: 
            b, a = stack.pop(), stack.pop() 
            if token == '+': stack.append(a + b) 
            elif token == '-': stack.append(a - b) 
            elif token == '*': stack.append(a * b) 
            elif token == '/': stack.append(a / b) 
    return stack[0] 
 
def main(): 
    while True: 
        expr = input("Введите выражение (или 'exit' для выхода): ").replace(' ', '') 
        if expr.lower() == 'exit': 
            break 
        try: 
            postfix = infix_to_postfix(expr) 
            result = evaluate_postfix(postfix) 
            print("Результат:", result) 
        except Exception as e: 
            print("Ошибка в выражении:", e) 
 
if __name__ == "__main__": 
    main() 
 
Введите выражение (или 'exit' для выхода): 2*(3+3)/6-1 Результат: 1.0
 def calc(op, a, b): # вычисление одной арифметической операции
  return {'+': a.__add__, '-': a.__sub__, '*': a.__mul__, '/': a.__floordiv__}[op](b)

d, o, s = [], '', ''
for ch in input() + '@': # получение чисел и операций
  if ch.isdigit(): # цифру добавляем к текущему числу
    s += ch
  else: # не цифру добавляем в операции, а текущее число запоминаем
    d.append(int(s))
    o +=ch
    s = ''

if o[0] in '+-' and o[1] in '*/': # вторая операция выполняется первой
  print(calc(o[0], d[0], calc(o[1], d[1], d[2])))
else: # операции выполняются в порядке появления
  print(calc(o[1], calc(o[0], d[0], d[1]), d[2]))