表达式的后缀求值
Postfix evaluation of an expression
此代码存在一些问题,因为它不返回负结果,只返回正部分。
我不明白为什么它不按照输入附加最后一个值及其符号(如果有)。
from collections import deque
ex = '231*+9-'
q = deque()
for i in ex:
if i.isdigit():
q.append(i)
else:
a= q.pop()
b= q.pop()
q.append(str(eval(a + i + b)))
print(q)
为了调试暂时修改你的代码:
from collections import deque
ex = '231*+9-'
q = deque()
for i in ex:
if i.isdigit():
q.append(i)
else:
a = q.pop()
b = q.pop()
q.append(str(eval(a + i + b)))
print('debug:', i, q) # Just add this line.
print(q)
您将能够更清楚地看到正在发生的事情:
debug: 2 deque(['2'])
debug: 3 deque(['2', '3'])
debug: 1 deque(['2', '3', '1'])
debug: * deque(['2', '3'])
debug: + deque(['5'])
debug: 9 deque(['5', '9'])
debug: - deque(['4'])
deque(['4'])
因此您可以看到它似乎大部分都在工作。如果您希望它在最后一步中从 5
中减去 9
(这似乎是基于 RPN 的使用),那么您的变量顺序错误。他们应该是:
b = q.pop() # Swap these
a = q.pop() # two around.
q.append(str(eval(a + i + b)))
实际上,您将 9
放入 a
并将 5
放入 b
,然后计算 a - b
或 9 - 5
.按照建议修复它可以得到:
debug: 2 deque(['2'])
debug: 3 deque(['2', '3'])
debug: 1 deque(['2', '3', '1'])
debug: * deque(['2', '3'])
debug: + deque(['5'])
debug: 9 deque(['5', '9'])
debug: - deque(['-4'])
deque(['-4'])
此代码存在一些问题,因为它不返回负结果,只返回正部分。
我不明白为什么它不按照输入附加最后一个值及其符号(如果有)。
from collections import deque
ex = '231*+9-'
q = deque()
for i in ex:
if i.isdigit():
q.append(i)
else:
a= q.pop()
b= q.pop()
q.append(str(eval(a + i + b)))
print(q)
为了调试暂时修改你的代码:
from collections import deque
ex = '231*+9-'
q = deque()
for i in ex:
if i.isdigit():
q.append(i)
else:
a = q.pop()
b = q.pop()
q.append(str(eval(a + i + b)))
print('debug:', i, q) # Just add this line.
print(q)
您将能够更清楚地看到正在发生的事情:
debug: 2 deque(['2'])
debug: 3 deque(['2', '3'])
debug: 1 deque(['2', '3', '1'])
debug: * deque(['2', '3'])
debug: + deque(['5'])
debug: 9 deque(['5', '9'])
debug: - deque(['4'])
deque(['4'])
因此您可以看到它似乎大部分都在工作。如果您希望它在最后一步中从 5
中减去 9
(这似乎是基于 RPN 的使用),那么您的变量顺序错误。他们应该是:
b = q.pop() # Swap these
a = q.pop() # two around.
q.append(str(eval(a + i + b)))
实际上,您将 9
放入 a
并将 5
放入 b
,然后计算 a - b
或 9 - 5
.按照建议修复它可以得到:
debug: 2 deque(['2'])
debug: 3 deque(['2', '3'])
debug: 1 deque(['2', '3', '1'])
debug: * deque(['2', '3'])
debug: + deque(['5'])
debug: 9 deque(['5', '9'])
debug: - deque(['-4'])
deque(['-4'])