python - Python中中缀符号的前缀符号

标签 python math stack infix-notation prefix-notation

我正在编写一个小型计算器(带有前缀表示法),我很好奇如何将前缀表示法转换为中缀表示法。我目前有一个功能,但它很奇怪,我不确定如何修复它。奇怪的是,我的意思是如果给定 ['+', x, y] 它将返回 (() + x + () + y) 这让我很困惑.这是代码。

def pre_in(read):
    #print read
    tempOp = read[0]
    body = read[1:]
    expr = []
    for i in range(len(body)-1):
        if not isinstance(body[i], list) and body[i] != " ":
            expr.append(str(body[i]))
            expr.append(tempOp)
        else:
            expr.append(str(pre_in(body[i])))
            expr.append(tempOp)
    try:
        if not isinstance(body[-1], list):
            expr.append(str(body[-1]))
        else:
            expr.append(str(pre_in(body[-1])))
    except:
        pass
    if expr != None: return "("+' '.join(expr)+")"

我做错了什么?

最佳答案

实际上您的代码工作正常。

print pre_in ( ['+', 8, 9] )

产量

(8 + 9)

编辑: 正如其他人所说,也许您想使用堆栈。这是一个带有一些示例的简单沙箱实现(它会产生很多括号,但不会造成伤害):

class Calculator:
    def __init__ (self):
        self.stack = []

    def push (self, p):
        if p in ['+', '-', '*', '/']:
            op1 = self.stack.pop ()
            op2 = self.stack.pop ()
            self.stack.append ('(%s %s %s)' % (op1, p, op2) )
        elif p == '!':
            op = self.stack.pop ()
            self.stack.append ('%s!' % (op) )
        elif p in ['sin', 'cos', 'tan']:
            op = self.stack.pop ()
            self.stack.append ('%s(%s)' % (p, op) )
        else:
            self.stack.append (p)

    def convert (self, l):
        l.reverse ()
        for e in l:
            self.push (e)
        return self.stack.pop ()

c = Calculator ()

print c.convert ( ['+', 8, 9] )
print c.convert ( ['!', 42] )
print c.convert ( ['sin', 'pi'] )
print c.convert ( ['+', 'sin', '/', 'x', 2, 'cos', '/', 'x', 3] )

关于python - Python中中缀符号的前缀符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498328/

相关文章:

python - 使用 Python 进行具有固定效应的面板数据回归

python - Numpy 在所有行对上广播元素乘积?

Python Unicode 字符串替换 : u, r 或无

python - 在python中使用计算函数自动填充

c - PIC18 堆栈/存储器管理的最佳实践?

javascript - 在 JavaScript 中计算对数数组的平均值

python - 是否有适用于 Python 的 erf() 的简单实现?

python - 如何循环遍历一个整数并提取另一个较短的整数(从左到右)?

c++ - 变量周围的堆栈已损坏

c++ - 为什么C++ "fill"可以初始化可变大小的数组?