fork(1) download
  1. precedence = {
  2. '+': 1,
  3. '-': 1,
  4. '*': 2,
  5. '/': 2
  6. }
  7. noncommunicative = '-/'
  8.  
  9. def prefix_to_infix(prefix):
  10. stack = []
  11. for token in reversed(prefix):
  12. if precedence_current := precedence.get(token):
  13. value_left, precedence_left = stack.pop()
  14. value_right, precedence_right = stack.pop()
  15. if 0 < precedence_left < precedence_current:
  16. value_left = f'({value_left})'
  17. if (
  18. 0 < precedence_right < precedence_current or
  19. precedence_right == precedence_current and
  20. token in noncommunicative
  21. ):
  22. value_right = f'({value_right})'
  23. stack.append((f'{value_left}{token}{value_right}', precedence_current))
  24. else:
  25. stack.append((token, 0))
  26. return stack[0][0]
  27.  
  28. print(prefix_to_infix('+/-94*5-736'))
  29. print(prefix_to_infix('-+---+78*/5426*7230'))
Success #stdin #stdout 0.03s 9700KB
stdin
Standard input is empty
stdout
(9-4)/(5*(7-3))+6
7+8-5/4*2-6-7*2+3-0