|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- from pythonds.basic.stack import Stack
- def infixToPostfix(infixexp):
- prec = {}
- prec['*'] = 3
- prec['/'] = 3
- prec['+'] = 2
- prec['-'] = 2
- prec['('] = 1
- opStack = Stack()
- postfixlist = []
- tokenlist = infixexp.split()
-
- for token in tokenlist:
- if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or '0123456789':
- postfixlist.append(token)
- elif token == '(':
- opStack.push(token)
- elif token in '*/+-':
- while not opStack.isEmpty() and prec[opStack.peek()] >= prec[token]:
- postfixlist.append(opStack.pop())
- opStack.push(token)
- elif token == ')':
- while opStack.pop() != '(':
- postfixlist.append(opStack.pop())
-
- while not opStack.isEmpty():
- postfixlist.append(opStack.pop())
-
- return ''.join(postfixlist)
- print(infixToPostfix("A * B + C * D"))
复制代码
为什么得不到AB*CD*+呢
- if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or '0123456789':
- 这句不符合python的思路 会短路 所有的都进这里了
- 应该改成
- if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in '0123456789':
复制代码
|
|