后缀表示法的评估

时间:2013-03-20 06:12:11

标签: python python-2.6

如何计算修复后符号的值: 我试过:

import operator

operator = {
    '+': operator.add, '-':  operator.sub,
    '*': operator.mul, '/':  operator.div, '%':  operator.mod,
    '**': operator.pow, '//': operator.floordiv,
}
l = []
exp = "11+2*"
for i in exp:
    if i in operator:
        a = operator[i]
        x = l[0]
        y = l[1]
        l[-2:] = [a(*l[-2:])]
        print l
    else:
        l.append(i)
        print l

怎么做?

2 个答案:

答案 0 :(得分:0)

确保让Python在将字符添加到堆栈之前将其解析为整数:

l.append(int(i))

答案 1 :(得分:0)

一些提示:

  • 您需要一个更好的解析器,逐个字符迭代是不够的(除非您只想拥有单个数字)。为了使它更简单,您可以要求数字和运算符分别用空格分隔并使用str.split

    elems = "11 2 3 + *".split()
    
  • 在将数字推入堆栈之前,您需要将数字转换为整数

堆栈操作看起来有点奇怪。有它

l.append(a(l.pop(), l.pop())

使其更明确。