Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- import operator
- def main():
- op_stack = []
- val_stack = []
- ops = ['*', '/', '+', '-']
- precedence = { '*':3, '/':3, '+':2, '-':2, '(': 0}
- eval_string = input("Enter an expression: ")
- eval_string = eval_string.replace(" ", "")
- eval_string = re.split(r'([)(*/+-])', eval_string)
- operand = re.compile(r'\d+\.*\d*')
- for token in eval_string:
- if operand.match(token):
- val_stack.append(float(token))
- print(token)
- if token == '(':
- op_stack.append(token)
- if token in ops:
- while len(op_stack) > 0 and precedence[token] <= precedence[op_stack[-1]]:
- op = op_stack.pop()
- do_op(op, val_stack)
- op_stack.append(token)
- if token == ')':
- while len(op_stack) > 0 and op_stack[-1] != '(':
- op = op_stack.pop()
- do_op(op, val_stack)
- op_stack.pop()
- while len(op_stack) > 0:
- op = op_stack.pop()
- do_op(op, val_stack)
- print(val_stack.pop())
- def do_op(op, val_stack):
- function = {'*':operator.mul, '/':operator.truediv, '+':operator.add, '-':operator.sub}
- temp = val_stack.pop()
- val_stack.append(function[op](val_stack.pop(), temp))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement