[Tutor] infix to postfix exponent handling

Quiles, Stephanie stephanie.quiles001 at albright.edu
Sat Aug 1 20:01:27 CEST 2015


My assignment calls for the program to be edited to handle the “^” symbol. the hint is that it should be done with just one line of code. Here is the assignment:
Modify the infix-to-postfix algorithm to handle exponentiation. Use the ^ symbol as the input token for testing.

Q-14: Modify the infixToPostfix function so that it can convert the following expression: 5 * 3 ^ (4 - 2)


Here is the code :

class Stack:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def push(self, item):
        self.items.insert(0,item)

    def pop(self):
        return self.items.pop(0)

    def peek(self):
        return self.items[0]

    def size(self):
        return len(self.items)


def infixToPostfix(infixexpr):
    prec = {}
    prec["^"] = 3
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr.split()

    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and \
               (prec[opStack.peek()] >= prec[token]):
                  postfixList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)

print(infixToPostfix("5 * 3 ^ (4 - 2)"))
print(infixToPostfix("( A + B ) * C - ( D - E ) * ( F + G )”))

this is the lien that i added:

    prec["^"] = 3

i also replaced the infixtopostfix to the problem:

("5 * 3 ^ (4 - 2)”))

here is the error I am getting :

Traceback (most recent call last):
  File "/Users/stephaniequiles/Downloads/Listings/listing_3_7.py", line 53, in <module>
    print(infixToPostfix("5 * 3 ^ (4 - 2)"))
  File "/Users/stephaniequiles/Downloads/Listings/listing_3_7.py", line 45, in infixToPostfix
    (prec[opStack.peek()] >= prec[token]):
KeyError: '(4'

Process finished with exit code 1

Please advise. not sure where i am failing with this

Thanks!!
Stephanie



More information about the Tutor mailing list