Guest User

Untitled

a guest
Jan 7th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. from stack import Stack
  2. import math
  3. import sys
  4.  
  5.  
  6. #binary operators
  7. def add(a, b):
  8.     return a + b
  9.  
  10. def multiply(a, b):
  11.     return a * b
  12.  
  13. def divide(a, b):
  14.     return a / b
  15.  
  16. def subtract(a, b):
  17.     return a - b
  18.  
  19. #unary operators
  20. def negate(a):
  21.     return -a
  22.  
  23. def square_root(a):
  24.     return math.sqrt(a)
  25.  
  26. bin_ops = {'+':add,
  27.             '-':subtract,
  28.             '*':multiply,
  29.             '/':divide}
  30.  
  31. unary_ops = {'n':negate,
  32.             'r':square_root}
  33.  
  34. def calculator(line):
  35.  
  36.     tokens = line.split()
  37.  
  38.     stack = Stack()
  39.  
  40.     for t in tokens:
  41.         if t not in bin_ops and t not in unary_ops:
  42.             stack.push(float(t))
  43.         elif t in bin_ops:
  44.             b = stack.pop()
  45.             a = stack.pop()
  46.             stack.push(bin_ops[t](a, b))
  47.         else:
  48.             a = stack.pop()
  49.             stack.push(unary_ops[t](a))
  50.  
  51.     return stack.top()
  52.  
  53. def main():
  54.  
  55.     for line in sys.stdin:
  56.         try:
  57.             a = calculator(line.strip())
  58.             print('{:.2f}'.format(a))
  59.         except IndexError:
  60.             print('Invalid RPN expression')
  61.  
  62. if __name__ == '__main__':
  63.     main()
  64.  
  65.  
  66.  
  67. #Stack class
  68.  
  69. class Stack(object):
  70.  
  71.     def __init__(self):
  72.         self.l = []
  73.  
  74.     def push(self, e):
  75.         self.l.append(e)
  76.  
  77.     def pop(self):
  78.         return self.l.pop()
  79.  
  80.     def top(self):
  81.         return self.l[-1]
  82.  
  83.     def is_empty(self):
  84.         return len(self.l) == 0
  85.  
  86.     def __len__(self):
  87.         return len(self.l)
Advertisement
Add Comment
Please, Sign In to add comment