2016-05-31 12 views
0

私はPythonでインフィニションを受け取り、それをポストフィックスエミュレーション(ポリッシュ記法)に変換するプログラムを実行しています。関数内の変数によるPythonの渡しが機能しません

class StackClass: 

    def __init__(self, itemlist=[]): 
     self.items = itemlist 

    def isEmpty(self): 
     if self.items == []: 
      return True 
     else: 
      return False 

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

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

    def push(self, item): 
     self.items.append(item) 
    return 0 

def parse_rpn(expression): 
    stack = [] 

    for val in expression.split(' '): 
     if val in ['-', '+', '*', '/', '^']: 
      op1 = stack.pop() 
      op2 = stack.pop() 
      if val == '-': result = op2 - op1 
      if val == '+': result = op2 + op1 
      if val == '*': result = op2 * op1 
      if val == '/': result = op2/op1 
      if val == '^': result = op2** op1 
      stack.append(result) 
     else: 
      stack.append(float(val)) 

    return stack.pop() 

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

    for token in tokenList: 
     if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "": 
      postfixList.append(token) 
     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) 

if __name__ == '__main__': 
    with open('data.in', 'r') as infile: 
     data = infile.read().replace('\n', '') 
    print(data) 
    b = infixToPostfix(data) 

入力(私はそれを「2 + 3 * 5」それは完璧な実行されますが、私はそれを文字列変数を渡した場合、それが爆発するような文字列を渡した場合)私は、関数infixToPostfixに文字列を渡すときに問題が来ますファイル:

"2 + 3 * 5" 
+1

インデントを修正できますか? – miradulo

+0

入力ファイルと実際のエラーも表示してください。 – renemilk

+0

今それは良いはずです。申し訳ありませんが、これは私がstackoverflowに投稿する初めてです。 –

答えて

0

入力ファイルには不要な引用符があります。ファイルからファイルを削除するか、コード内の引用符を処理してください。ファイルから読み込むと、すでに文字列が得られます。

+0

FML! ... ありがとう。 –

関連する問題