fork(2) download
  1. class RpnException(Exception):
  2. pass
  3.  
  4. def evalRPN(expr):
  5. stack=[]
  6. for a in expr.split():
  7. if (a=='+'):
  8. if (len(stack) < 2):
  9. raise RpnException("Лишний знак +")
  10. a2=stack[0]
  11. a1=stack[1]
  12. r=a1+a2
  13. stack=[r]+stack[2:]
  14. elif (a=='-'):
  15. if (len(stack) < 2):
  16. raise RpnException("Лишний знак -")
  17. a2=stack[0]
  18. a1=stack[1]
  19. r=a1-a2
  20. stack=[r]+stack[2:]
  21. elif (a=='*'):
  22. if (len(stack) < 2):
  23. raise RpnException("Лишний знак *")
  24. a2=stack[0]
  25. a1=stack[1]
  26. r=a1*a2
  27. stack=[r]+stack[2:]
  28. elif (a=='/'):
  29. if (len(stack) < 2):
  30. raise RpnException("Лишний знак /")
  31. a2=stack[0]
  32. a1=stack[1]
  33. if (a2==0):
  34. raise RpnException("Деление на нуль!")
  35. else:
  36. r=a1/a2
  37. stack=[r]+stack[2:]
  38. else:
  39. stack=[int(a)]+stack
  40.  
  41. if (len(stack) != 1):
  42. raise RpnException("Лишнее число")
  43. return stack[0]
  44.  
  45. try:
  46. print(evalRPN("12 3 + 5 /"))
  47. except RpnException as e:
  48. print(e)
  49.  
  50.  
  51.  
Success #stdin #stdout 0.01s 27712KB
stdin
Standard input is empty
stdout
3.0