Префикс_то_постфикс: умножение не отображается в правильном месте

#python #expression #postfix-mta #prefix

Вопрос:

Я новичок в программировании на python и пишу функцию, которая берет строку, содержащую математическое выражение с префиксной нотацией, строит двоичное дерево, а затем пересекает его, чтобы получить эквивалентное выражение с постфиксной нотацией.

когда я тестировал код, используя приведенное ниже утверждение, первые 2 актива («5») == «5») и (» 10 20″) == «10 20 «), похоже, все работает так, как и ожидалось. Но для окончательного утверждения:

  • Входные данные: * 1 2 — 5 3
  • Вывод: * 1 2 5 3-
  • Ожидается: 1 2 5 3 — *

Пожалуйста, объясните, почему * появляется в начале, а не в конце. большое спасибо.

 assert(prefix_to_postfix("5") == "5") assert(prefix_to_postfix("  10 20") == "10 20  ") assert(prefix_to_postfix("*   1 2 - 5 3") == "1 2   5 3 - *")  

код

 OPERATORS = set([' ', '-', '*', '/', '(', ')', '^']) PRIORITY = {' ': 1, '-': 1, '*': 2, '/': 2, '^': 3}  def prefix_to_postfix(expression):  stack = []  output = ''  for ch in expression:  if ch not in OPERATORS:  output  = ch  elif ch == '(':  stack.append('(')  elif ch == ')':  while stack and stack[-1] != '(':  output  = stack.pop()  stack.pop()  else:  while stack and stack[-1] != '(' and PRIORITY[ch] lt;= PRIORITY[stack[-1]]:  output  = stack.pop()  stack.append(ch)  while stack:  output  = stack.pop()  return output  expression = input('Enter expression: ') print(prefix_to_postfix(expression))  

Комментарии:

1. для ПРИОРИТЕТА (ПРИОРИТЕТ = {‘ ‘: 1, ‘-‘: 1, ‘*’: 2, ‘/’: 2, ‘^’: 3}) установите правильный приоритет, например, следуйте за БОДМАМИ