fork(1) download
  1. def rpn(s):
  2. lex=parse(s)
  3. s2=[]
  4. r=[]
  5. oper=["+","-","*","/","(",")"]
  6. for a in lex:
  7. if a=="(":
  8. s2=[a]+s2
  9. elif a in oper:
  10. if s2==[]:
  11. s2=[a]
  12. elif a==")":
  13. while(True):
  14. q=s2[0]
  15. s2=s2[1:]
  16. if q=="(":
  17. break
  18. r+=[q]
  19. elif prty(s2[0]) < prty(a):
  20. s2=[a]+s2
  21. else:
  22. while(True):
  23. if s2==[]:
  24. break
  25. q=s2[0]
  26. r+=[q]
  27. s2=s2[1:]
  28. if prty(q)==prty(a):
  29. break
  30. s2=[a]+s2
  31. else:
  32. r+=[a]
  33. while(s2 != []):
  34. q=s2[0]
  35. r+=[q]
  36. s2=s2[1:]
  37. return r
  38.  
  39. def prty(o):
  40. if o=="+" or o=="-":
  41. return 1
  42. elif o=="*" or o=="/":
  43. return 2
  44. elif o=="(":
  45. return 0
  46.  
  47. def parse(s):
  48. delims=["+","-","*","/","(",")"]
  49. lex=[]
  50. tmp=""
  51. for a in s:
  52. if a != " ":
  53. if a in delims:
  54. if tmp != "":
  55. lex+=[tmp]
  56. lex+=[a]
  57. tmp=""
  58. else:
  59. tmp+=a
  60. if tmp != "":
  61. lex+=[tmp]
  62. return lex
  63.  
  64. print(rpn("2+44*(56-12)/a-66"))
  65.  
  66.  
Success #stdin #stdout 0.02s 9224KB
stdin
Standard input is empty
stdout
['2', '44', '56', '12', '-', '*', 'a', '/', '+', '66', '-']