Yeah computePostfixBis works!
This commit is contained in:
parent
d477031780
commit
2f6c79ef84
43
calculus.py
43
calculus.py
@ -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))
|
||||||
|
|
||||||
|
|
||||||
|
25
generic.py
25
generic.py
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user