gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:17 26 4
gpt4 key购买 nike

我正在编写一个小型计算器(带有前缀表示法),我很好奇如何将前缀表示法转换为中缀表示法。我目前有一个功能,但它很奇怪,我不确定如何修复它。奇怪的是,我的意思是如果给定 ['+', 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com