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"
インデントを修正できますか? – miradulo
入力ファイルと実際のエラーも表示してください。 – renemilk
今それは良いはずです。申し訳ありませんが、これは私がstackoverflowに投稿する初めてです。 –