隐藏页面特效

正则计算器---day19

复制代码
计算下面表达式最后的结果
strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
# ### 正则计算器 import re strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" # 2776672.6952380957 # strvar = "-30+(40+5*-2+3/2)*8 + (4- 7) " print(eval(strvar)) # 2776672.6952380957 # 处理符号 def sign_exp(strvar): strvar = strvar.replace("+-","-") strvar = strvar.replace("--","+") strvar = strvar.replace("-+","-") strvar = strvar.replace("++","+") return strvar # 计算表达式 def calc_exp(strvar): # 判断字符串是 乘法 还是 除法 if "*" in strvar: a,b = strvar.split("*") return float(a) * float(b) if "/" in strvar: a,b = strvar.split("/") return float(a) / float(b) # 操作表达式 def opreate_exp(strvar): # 先算乘除 while True: # (40+5*-2+3/2) # 匹配 [谁*谁] 或者 [谁/谁] 例: 5*-2 3/2 obj = re.search(r"\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?",strvar) if obj: res1 = obj.group() # print(res1) # 5*-2 # 计算表达式的结果 res2 = calc_exp(res1) # print(res2 , type(res2)) # -10.0 <class 'float'> # 将所得的结果,替换到原来的字符串当中,以匹配下一个乘法或者除法 strvar = strvar.replace(res1,str(res2)) # print(strvar) # (40+-10.0+3/2) else: # 当obj 返回None的时候停止 break # 处理表达式中的符号 strvar = sign_exp(strvar) # print(strvar) # (40+-10.0+1.5) (40-10.0+1.5) # 计算剩下+-的表达式(将每一个数字匹配出来,做累加) lst = re.findall("[+-]?\d+(?:\.\d+)?",strvar) # print(lst) # ['40', '-10.0', '+1.5'] total = 0 for i in lst: total += float(i) # print(total) # 31.5 return total # 移除括号 def remove_bracket(strvar): while True: obj = re.search("\([^()]+\)",strvar) # print(obj) if obj: res1 = obj.group() # print(res1) # (40+5*-2+3/2) "-30+(40+5*-2+3/2)*8 +(4-7)" # 计算一个括号里面表达式的值 res2 = opreate_exp(res1) # print(res2) # 31.5 # 替换原来的括号,消除括号 strvar = strvar.replace(res1,str(res2)) # print(strvar) # -30+31.5*8+(4-7) else: return strvar # 返回一串没有括号的表达式 # main函数当中不写逻辑,只调用相关的功能 def main(strvar): # 1.整理数据,把没用的空格去掉 strvar = strvar.replace(" ","") # 2.移除所有括号 strvar = remove_bracket(strvar) # print(strvar) # -30+31.5*8+-3.0 # 3.计算表达式 return opreate_exp(strvar) res = main(strvar) print(res)
复制代码

 


__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/12957828.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(177)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示