Yeah computePostfixBis works!

This commit is contained in:
Lafrite 2013-07-18 19:43:36 +02:00
parent d477031780
commit 2f6c79ef84
2 changed files with 58 additions and 10 deletions

View File

@ -71,6 +71,47 @@ def computePostfix(postfixExp):
return operandeStack.pop() return operandeStack.pop()
def computePostfixBis(postfixExp):
"""Compute a postfix expression like a good student
:param postfixExp: a postfix expression
:returns: the result of the expression
"""
print(postfixToInfix(postfixExp))
# where to save numbers or
operandeStack = Stack()
tokenList = postfixExp.split(" ")
while len(tokenList) > 1:
tmpTokenList = []
i = 0
while len(tokenList) > 2:
if (tokenList[1].isdigit() or (tokenList[1][0] == "-" and tokenList[1][1:].isdigit())) and tokenList[2] in "+-*/":
# S'il y a une opération à faire
op1 = tokenList[0]
op2 = tokenList[1]
token = tokenList[2]
res = doMath(token, op1, op2)
tmpTokenList.append(res)
# Comme on vient de faire le calcul, on peut sauter les deux prochains termes
i += 3
del tokenList[0:3]
else:
tmpTokenList.append(tokenList[0])
i += 1
del tokenList[0]
tmpTokenList += tokenList
tokenList = tmpTokenList.copy()
print(postfixToInfix(" ".join(tokenList)))
return tokenList[0]
def doMath(op, op1, op2): def doMath(op, op1, op2):
"""Compute "op1 op op2" """Compute "op1 op op2"
@ -132,6 +173,8 @@ def test(exp):
postfix = infixToPostfix(exp) postfix = infixToPostfix(exp)
print("Postfix " , postfix) print("Postfix " , postfix)
print(computePostfix(postfix)) print(computePostfix(postfix))
print("Bis")
print(computePostfixBis(postfix))
#print(postfixToInfix(postfix)) #print(postfixToInfix(postfix))

View File

@ -9,6 +9,14 @@ class Stack(object):
"""@todo: to be defined1 """ """@todo: to be defined1 """
self.items = [] self.items = []
def pushFromList(self, list):
"""Push the list in the stack
:param list: a list
"""
for i in list[::-1]:
self.push(i)
def isEmpty(self): def isEmpty(self):
""" Says if the stack is empty """ Says if the stack is empty
:returns: @todo :returns: @todo
@ -27,27 +35,24 @@ class Stack(object):
def pop(self): def pop(self):
"""Getting the last item and remove it """Getting the last item and remove it
:returns: @todo :returns: last item
""" """
return self.items.pop() return self.items.pop()
def peek(self): def peek(self, posi = 0):
"""Getting the last item """Getting the last item
:returns: @todo :param posi: which item to peek 0 (last) 1 (the onebefore the last)...
:returns: the item
""" """
return self.items[-1] return self.items[-1 - posi]
def size(self): def __len__(self):
"""Lenght of the stack
:returns: @todo
"""
return len(self.items) return len(self.items)
def __str__(self): def __str__(self):
return str(self.items) return str(self.items) + " -> "
def __add__(self, addList): def __add__(self, addList):
return self.items + addList return self.items + addList