开发一个简单的Python计算器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # -*- coding:utf-8 -*- # @Time : 2019/x/x # @Author : root import re operatorDict = { '+' : lambda a, b: float (a) + float (b), '-' : lambda a, b: float (a) - float (b), '*' : lambda a, b: float (a) * float (b), '/' : lambda a, b: float (a) / float (b), } def calculator(expression = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + ' '7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' ): ''' 计算器 总逻辑: 1.先找出内层括号,然后计算其内的终值,用终值替换原表达式 2.然后重复以上过程 无括号部分计算逻辑: 1.先截断为数字和运算符的列表,数字可包含负号; 2.运算列表中的值并替换,先乘除后加减; :param expression: 字符串表达式 :return:表达式计算值 ''' print ( "正确答案为: " , eval (expression)) def calWithOutBrackets(expression = '-1+2*3/4-5*-3' ): # 截断为数字和运算符的列表 for i in operatorDict: expression = expression.replace(i, 's' + i + 's' ) l = expression.split( 's' ) l2 = [] i = 0 while i < len (l): if l[i] = = '': l2.append(l[i + 1 ] + l[i + 2 ]) i + = 2 else : l2.append(l[i]) # 不带负号的数字和运算符 i + = 1 # 运算乘除 i = 1 while i< len (l2): if l2[i] in [ '*' , '/' ]: l2[i - 1 :i + 2 ] = [operatorDict[l2[i]](l2[i - 1 ],l2[i + 1 ])] else : i + = 2 # 运算加减 while len (l2)> 1 : l2[ 0 : 3 ] = [operatorDict[l2[ 1 ]](l2[ 0 ], l2[ 2 ])] return str (l2[ 0 ]) expression = expression.replace( ' ' ,'') check = re.search( '\([^\(\)]+\)' , expression) while check: checkValue = check.group() # print(checkValue) expression = expression.replace(checkValue, calWithOutBrackets(checkValue[ 1 : - 1 ])) check = re.search( '\([^\(\)]*\)' , expression) else : return calWithOutBrackets(expression) if __name__ = = '__main__' : re = calculator() print ( "实际结果为: " ,re) |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析