Python 后缀计算,如何告诉编译器要执行什么运算符,因为在等式中,我们在字符串中给出了后缀表达式
后缀评估算法。 任务是迭代表达式并Python 后缀计算,如何告诉编译器要执行什么运算符,因为在等式中,我们在字符串中给出了后缀表达式,python,python-3.x,Python,Python 3.x,后缀评估算法。 任务是迭代表达式并 如果当前项是操作数,则将其值推送到堆栈上 如果当前项是运算符:(a)从堆栈中弹出最上面的两个操作数。 (b) 执行该操作。(c)将该操作的结果推回堆栈 我建议对值使用单个dict而不是多个变量(如果您需要另一种方法,可以使用eval) 如果需要变量,则以下操作将起作用: from collections import deque eq = 'ABC+*D/' a, b, c, d = 8, 2, 3, 10 ops = { '+': lambda x,
我建议对值使用单个dict而不是多个变量(如果您需要另一种方法,可以使用eval) 如果需要变量,则以下操作将起作用:
from collections import deque
eq = 'ABC+*D/'
a, b, c, d = 8, 2, 3, 10
ops = {
'+': lambda x,y : y + x,
'-': lambda x,y : y - x,
'*': lambda x,y : y * x,
'/': lambda x,y : y / x,
}
stack = deque()
for x in eq:
if x in ops:
stack.append(ops[x](stack.pop(), stack.pop()))
else:
stack.append(eval(x.lower()))
print(stack[0])
您是否尝试过使用一些
if
语句?问题是运算符是以字符串类型给出的,因此编译器如何知道它是什么?编译器不知道。您必须编写代码来实现这一点。例如:如果op='+':result=i+j
from collections import deque
eq = 'ABC+*D/'
vars = {'A':8, 'B':2, 'C':3, 'D':10}
ops = {
'+': lambda x,y : y + x,
'-': lambda x,y : y - x,
'*': lambda x,y : y * x,
'/': lambda x,y : y / x,
}
stack = deque()
for x in eq:
if x in ops:
stack.append(ops[x](stack.pop(), stack.pop()))
else:
stack.append(vars[x])
print(stack)
from collections import deque
eq = 'ABC+*D/'
a, b, c, d = 8, 2, 3, 10
ops = {
'+': lambda x,y : y + x,
'-': lambda x,y : y - x,
'*': lambda x,y : y * x,
'/': lambda x,y : y / x,
}
stack = deque()
for x in eq:
if x in ops:
stack.append(ops[x](stack.pop(), stack.pop()))
else:
stack.append(eval(x.lower()))
print(stack[0])