24588: 后序表达式求值
http://cs101.openjudge.cn/practice/24588/
后序表达式由操作数和运算符构成。操作数是整数或小数,运算符有 + - * / 四种,其中 * / 优先级高于 + -。后序表达式可用如下方式递归定义:
- 一个操作数是一个后序表达式。该表达式的值就是操作数的值。
- 若a,b是后序表达式,c是运算符,则"a b c"是后序表达式。“a b c”的值是 (a) c (b),即对a和b做c运算,且a是第一个操作数,b是第二个操作数。下面是一些后序表达式及其值的例子(操作数、运算符之间用空格分隔):
3.4 值为:3.4 5 值为:5 5 3.4 + 值为:5 + 3.4 5 3.4 + 6 / 值为:(5+3.4)/6 5 3.4 + 6 * 3 + 值为:(5+3.4)*6+3
输入
第一行是整数n(n<100),接下来有n行,每行是一个后序表达式,长度不超过1000个字符
输出
对每个后序表达式,输出其值,保留小数点后面2位
样例输入
3
5 3.4 +
5 3.4 + 6 /
5 3.4 + 6 * 3 +样例输出
8.40
1.40
53.40来源
Guo wei
python
def compute(stack, operator):
op1 = stack.pop()
op2 = stack.pop()
if operator == '+':
return op2 + op1
elif operator == '-':
return op2 - op1
elif operator == '*':
return op2 * op1
elif operator == '/':
return op2 / op1
def post_eva(formula):
comp = '+-*/'
wordlist = formula.split()
opStack = []
for word in wordlist:
if word not in comp:
opStack.append(float(word))
else:
op = compute(opStack, word)
opStack.append(op)
return opStack[0]
n = int(input())
for _ in range(n):
result = post_eva(input())
print(f"{result:.2f}")