【Python数据结构与算法】栈----后序表达式求值

举报
是Dream呀 发表于 2024/08/28 22:22:57 2024/08/28
【摘要】 题目:后序表达式求值描述后序表达式由操作数和运算符构成。操作数是整数或小数,运算符有 + - * / 四种,其中 * / 优先级高于 + -。后序表达式可用如下方式递归定义:一个操作数是一个后序表达式。该表达式的值就是操作数的值。若a,b是后序表达式,c是运算符,则"a b c"是后序表达式。“a b c”的值是 (a) c (b),即对a和b做c运算,且a是第一个操作数,b是第二个操作数...

在这里插入图片描述

题目:后序表达式求值

描述
后序表达式由操作数和运算符构成。操作数是整数或小数,运算符有 + - * / 四种,其中 * / 优先级高于 + -。后序表达式可用如下方式递归定义:

  1. 一个操作数是一个后序表达式。该表达式的值就是操作数的值。

  2. 若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

AC代码

def countSuffix(s):  
   stack = []
   for x in s.split():
      if x in "+-*/":
         a,b = stack.pop(),stack.pop()
         stack.append(eval(str(b) + x + str(a)))
      else:
         stack.append(float(x))
   return stack[0]
n = int(input())
for i in range(n):
    print("%.2f" % countSuffix(input()))

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。