Advertisement
Guest User

Untitled

a guest
May 16th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.02 KB | None | 0 0
  1. OPERATORS = {'+': (1, lambda x, y: x + y), '-': (1, lambda x, y: x - y),
  2.              '*': (2, lambda x, y: x * y), '/': (2, lambda x, y: x / y)}
  3.  
  4. def parse(line):
  5.     num = ''
  6.     for i in line:
  7.         if not num and i in '-':
  8.             num += i
  9.             continue
  10.         if i in '1234567890.':
  11.             num += i
  12.         elif num:
  13.             yield float(num)
  14.             num = ''
  15.         if i in OPERATORS or i in '()':
  16.             yield i
  17.     if num:
  18.         yield float(num)
  19.  
  20. def sort(parsed):
  21.     tmp = []
  22.     for i in parsed:
  23.         if i in OPERATORS:
  24.             while tmp and tmp[-1] != '(' and OPERATORS[i][0] <= OPERATORS[tmp[-1]][0]:
  25.                 yield tmp.pop()
  26.             tmp.append(i)
  27.         elif i == ')':
  28.             while tmp:
  29.                 x = tmp.pop()
  30.                 if x == '(':
  31.                     break
  32.                 yield x
  33.         elif i == '(':
  34.             tmp.append(i)
  35.         else:
  36.             yield i
  37.     while tmp:
  38.         yield tmp.pop()
  39.  
  40. def calc(sort):
  41.     tmp = []
  42.     for i in sort:
  43.         if i in OPERATORS:
  44.             y = tmp.pop()
  45.             x = tmp.pop()
  46.             tmp.append(OPERATORS[i][1](x, y))
  47.         else:
  48.             tmp.append(i)
  49.     return tmp[0]
  50.  
  51. inp = raw_input('Calculate: ')
  52. print 'Equall: ', calc(sort(parse(inp)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement