欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > >内容正文

python

【python】洛谷 p1175-凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 20 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 【python】洛谷 p1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

    • 题目
    • 代码
    • ac截图

题目

代码

碎碎念:我用来复习栈的,刷了巨长时间,一直runtine error,编译直接就没有过。
好家伙,然后发现是数据给的不够严谨,左右两端有空格,使用strip()处理一下就好了。

# 栈结构 class stack:def __init__(self,*args):self.items = [i for i in args]def __str__(self):return str(self.items)def push(self,item):self.items.append(item)def pop(self):return self.items.pop()def is_empty(self):return self.items == []def peek(self):return self.items[-1]# 返回最后一个元素def size(self):return len(self.items)def show(self):return self.itemsdef clear(self):self.items = []# 中缀表达式 => 后缀表达式 # lg p1175 表达式的转换def change_expression(s: str):dic = {"(": 0,"^": 3,"*": 2,"/": 2," ": 1,"-": 1}stack = stack() # 存储符号res = [] # 放答案for i in s:# 操作符if i in [' ', '-', '*', '/', '^']:# 要先取出优先级更高的,或者相等的运算符while (not stack.is_empty() and dic[stack.peek()] >= dic[i]):res.append(stack.pop())stack.push(i)elif i == '(':stack.push(i)elif i == ')':top_token = stack.pop()while (top_token != '('):res.append(top_token)top_token = stack.pop()else:# 运算数res.append(i)# 剩余元素全部加入while not stack.is_empty():res.append(stack.pop())return " ".join(res)def calc_postfix_expression(s: str):# 计算后缀表达式stack = stack()# start 方便输出temp = list(s)index = 0# end 方便输出for i in s:if i in "0123456789":# 运算数stack.push(int(i))else:# 运算符op2 = stack.pop()op1 = stack.pop()ans = do_math(i, op1, op2)stack.push(ans)# start 输出依次结果before = temp[0:index-2]before.append(str(ans))out = before temp[index1:]temp = outindex = index - 2print(" ".join(out))# end 输出结果index = 1return stack.pop()def do_math(op, op1, op2):if op == ' ':return op1op2elif op == '-':return op1-op2elif op == '*':return op1*op2elif op == '/':return op1//op2elif op == '^':return op1**op2if __name__ == '__main__':# 对于题目中的输入字符串一定要小心(如果比赛题目不严谨,会导致很多问题,最后strip()一下)expression = input().strip()res = change_expression(expression)# res = change_expression("(1 2)*3-4")print(res) # 输出结果calc_postfix_expression(res.replace(" ", ""))# print(ans)

ac截图

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的【python】洛谷 p1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图