Rabbit House

時間の中 泳ぎ続ける

@leo9年前

2016-12-11
17:08
Tech

Infix to Postfix and Evaluation of Postfix

def infix2postfix(infix):
  postfix=[]
  digits=['1','2','3','4','5','6','7','8','9','0']
  ohigh=['*','/']
  olow=['+','-']
  s=[]
  i=0
  while(i<len(infix)):
    if infix[i] in digits:
      postfix.append(infix[i])
    if infix[i]=='(':
      s.append(infix[i])
    if infix[i] in olow:
      while(len(s)!=0 and s[len(s)-1] in ohigh):
        postfix.append(s[len(s)-1])
        s.pop()
      else:
        s.append(infix[i])
    if infix[i] in ohigh:
      s.append(infix[i])
    if infix[i]==')':
      while(len(s)!=0 and s[len(s)-1]!='('):
        postfix.append(s[len(s)-1])
        s.pop()
      if s[len(s)-1]=='(':
        s.pop()
    i+=1
  while(len(s)!=0):
    postfix.append(s[len(s)-1])
    s.pop()
  return postfix
print infix2postfix("6-((5+4)*(3-2)+1)")

def cal(n2,n1,operation):
  if operation=='+':
    return (int(n1)+int(n2))
  if operation=='-':
    return (int(n1)-int(n2))
  if operation=='*':
    return (int(n1)*int(n2))
  if operation=='/':
    return d(int(n1)/int(n2))

def evaluatePostfix(postfix):
  digits=['1','2','3','4','5','6','7','8','9','0']
  op=['+','-','*','/']
  s=[]
  postfix=postfix[::-1]
  #print postfix
  while(len(postfix)>1):
    if postfix[len(postfix)-1] in digits:
      s.append(postfix[len(postfix)-1])
      postfix.pop()
    if postfix[len(postfix)-1] in op:
      operation=postfix[len(postfix)-1]
      postfix.pop()
      n1=s[len(s)-1]
      #print n1
      s.pop()
      n2=s[len(s)-1]
      #print n2
      s.pop()
      s.append(cal(n1,n2,operation))
    #print postfix,s
  if len(postfix)==1 and len(s)==2:
    return cal(int(s[1]),int(s[0]),postfix[0])

print evaluatePostfix(infix2postfix("6-((5+4)*(3-2)+1)"))

Output:

Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.8.2] on linux

['6', '5', '4', '+', '3', '2', '-', '*', '1', '+', '-']
-4

Infix to Postfix and Evaluation of Postfix