#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}) установите правильный приоритет, например, следуйте за БОДМАМИ