Pagini recente » Cod sursa (job #1049811) | Cod sursa (job #1906622) | Cod sursa (job #2808102) | Cod sursa (job #1107365) | Cod sursa (job #2559135)
class Stack(object):
def __init__(self):
self.items = []
def __str__(self):
return "{}".format(self.items)
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items) - 2]
def new(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
def priority(operator):
if operator == '+' or operator == '-':
return 1
if operator == '*' or operator == '/':
return 2
return 0
def calculate(a, b, operator):
if operator == '+': return a + b
if operator == '-': return a - b
if operator == '*': return a * b
if operator == '/': return a // b
def evaluate(expression):
i = 0
while i < len(expression):
if expression[i] == ' ':
i += 1
continue
elif expression[i] == '(':
operatorsStack.push(expression[i])
elif expression[i].isdigit():
operand = 0
while (i < len(expression) and
expression[i].isdigit()):
operand = (operand * 10) + int(expression[i])
i += 1
operandsStack.push(operand)
elif expression[i] == ')':
while operatorsStack.size() != 0 and operatorsStack.new() != '(':
operand2 = operandsStack.pop()
operand1 = operandsStack.pop()
operator = operatorsStack.pop()
operandsStack.push(calculate(operand1, operand2, operator))
operatorsStack.pop()
else:
while (operatorsStack.size() != 0 and
priority(operatorsStack.new()) >= priority(expression[i])):
operand2 = operandsStack.pop()
operand1 = operandsStack.pop()
operator = operatorsStack.pop()
operandsStack.push(calculate(operand1, operand2, operator))
operatorsStack.push(expression[i])
i += 1
while operatorsStack.size() != 0:
operand2 = operandsStack.pop()
operand1 = operandsStack.pop()
operator = operatorsStack.pop()
operandsStack.push(calculate(operand1, operand2, operator))
return operandsStack.new()
s = ''
operatorsStack = Stack()
operandsStack = Stack()
print(s, '=', evaluate(s))