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()
Комментарии могут быть опубликованы или отклонены после ручной проверки.
Если Вам нужен ответ на вопрос приватно от автора сайта, введите свой реальный email.