python字符串计算加减乘除代码_Python 70行代码实现简单算式计算器解析
描述:用户输入一系列算式字符串,程序返回计算结果。
要求:不使用eval、exec函数。
实现思路:找到当前字符串优先级最高的表达式,在算术运算中,()优先级最高,则取出算式最底层的(),再进行加减乘除运算。对于加减乘除,也要确立一个优先级,可以使用一个运算符列表,用for循环逐个处理运算符,并且要考虑同级情况(如for遍历至*时,也要考虑同级别的\是否要提前运算)。不断循环上述过程,直到最终得到一个结果。
关键点:使用re模块匹配出当前状态下优先级最高的算式。
result = re.search(‘\([^()]+\)’,s)
实现代码:
import re'''根据本逻辑,‘-'必须早于‘+'循环 否则特殊情况会报错 原因是若出现符号--,会被处理为+,若+优先遍历,最后+将无法被处理'''oper_char = ['^','*','/','-','+']def format_str(s): '''除去空格和两边括号''' return s.replace(' ','').replace('(','').replace(')','') def handle_symbol(s): '''处理多个运算符并列的情况''' return s.replace('+-','-').replace('--','+').replace('-+','-').replace('++','+') def cal(x,y,opertor): '''加减乘除开方''' if opertor == '^':return x**y elif opertor == '*':return x*y elif opertor == '/':return x/y elif opertor == '+':return x+y elif opertor == '-':return x-y def Bottom_operation(s): '''无括号运算 返回一个浮点数 symbol用于判断返回值是正还是负''' symbol = 0 s = handle_symbol(s) for c in oper_char: while c in s: id,char = (s.find(c),c) if c in ('*','/') and '*' in s and '/' in s: ids,idd = (s.find('*'),s.find('/')) id,char = (ids,'*') if ids <= idd else (idd,'/') if c in ('+','-') and '+' in s and '-' in s: ida,idd = (s.find('+'),s.find('-')) id,char = (ida,'+') if ida <= idd else (idd,'-') if id == -1:break left,right = ('','') for i in range(id - 1,-1,-1): if s[i] in oper_char:break left = s[i] + left for i in range(id + 1,len(s)): if s[id+1] == '-': right += s[i] continue if s[i] in oper_char:break right += s[i] if right == '' or left == '': if s[0] in ('-','+'): if '+' not in s[1:] and '-' not in s[1:]:break s = s[1:].replace('-','负').replace('+','-').replace('负','+') symbol += 1 continue else:return '输入算式有误' old_str = left + char + right new_str = str(cal(float(left),float(right),char)) s = handle_symbol(s.replace(old_str,new_str)) return float(s) if symbol % 2 == 0 else -float(s) def get_bottom(s): '''获取优先级最高的表达式''' res = re.search('\([^()]+\)',s) if res != None:return res.group() if __name__ == '__main__': while True: s1 = input('请输入您要计算的表达式(支持加减乘除开方): ') while get_bottom(s1) != None: source = get_bottom(s1) result = Bottom_operation(format_str((source))) s1 = s1.replace(source,str(result)) print(Bottom_operation(format_str(s1)))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
python字符串计算加减乘除代码_Python 70行代码实现简单算式计算器解析相关推荐
- python 拆分excel工作表_Python几行代码轻松拆分表格
Python几行代码轻松拆分表格 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 什么?,Python几行代码竟然可以按指定轻松拆分表格? 将test.xls中的数据按地区 ...
- python 判断图片中物体位置_Python 10行代码搞定图片中物体检测
使用Python, 如何编程实现图片中的物体检测[也叫对象检测/object detection]? 怎么知道图像中有哪些物体? 或许您想要计算图像中苹果的数量? 在这篇文章中,我将向您展示如何使用P ...
- python用户输入算式并计算_Python 70行代码实现简单算式计算器
描述:用户输入一系列算式字符串,程序返回计算结果. 要求:不使用eval.exec函数. 实现思路:找到当前字符串优先级最高的表达式,在算术运算中,()优先级最高,则取出算式最底层的(),再进行加减乘 ...
- python自动填写问卷代码_python 30行代码自动填写问卷(单选题和多选题)
运行代码的条件 谷歌浏览器 下载好你的谷歌浏览器对应版本的chromedriver.exe解压到你的python.exe目录下 python3版本(我用的是3.7) 在python中安装好seleni ...
- aspx网页背景图片设置代码_python 30行代码自动填写问卷(单选题和多选题)
运行代码的条件 谷歌浏览器 下载好你的谷歌浏览器对应版本的chromedriver.exe解压到你的python.exe目录下 python3版本(我用的是3.7) 在python中安装好seleni ...
- python按行拆分表格_Python几行代码轻松拆分表格
Python几行代码轻松拆分表格 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 什么?,Python几行代码竟然可以按指定轻松拆分表格? 将test.xls中的数据按地区 ...
- Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法)
Python科学计算库核心知识点总结_代码篇(ML/DL依赖语法) ...
- Python从入门到高手的80行代码
文章目录 基础入门 菜鸟提升 基础晋级 高手之路 内置包库 奇技淫巧 最新版: Python从入门到入土的90行代码 基础入门 1 python 即在命令行输入python,进入Python的开发环境 ...
- 用70行代码实现日志分析程序
python又一力作,感受python的强大.用70行代码实现日志分析程序 功能介绍:可直接对文本日至进行分组和排序功能,完了输出结果粘贴到excel里就可以直接生成图表,对于排查一些生产环境问题有很 ...
最新文章
- Linux网络路由简介-查看网络路由
- DataReader和DataSet区别
- Android学习:自定义ViewGroup方法总结
- 微信JS-SDK使用步骤(以微信扫一扫为例)
- 刨根问底——Handler
- Struts2中配置默认Action
- [转]iOS5 ARC学习笔记:strong、weak等详解
- Git 添加空文件夹的方法
- e语言通用进销存源码_Go 语言设计哲学之五:代码风格的唯一标准
- cocos2d-x AssetsManager libcurl使用心得
- php 高并发接口,接口高并发解决方案
- Android半透明对话框实现
- 如何将文件PDF格式转换成Word格式
- 招投标信息爬虫 (只上最简单的版本,仅用于技术交流)
- python的sysfont_pygame.font.SysFont游戏文字交互
- 稍加改进的Switch/Case扩展方法
- 全网最详细,宿主机ping虚拟机的主机名失败,但ping虚拟机的ip成功
- 未来的世界:方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!
- qiime2-2022.8基于ubuntu的安装教程
- 人工智能的前世今生,别被满大街的人工智能所迷惑
热门文章
- html中链接不自动变色,HTML 点击 标签 链接 点击之后变色-转发【已解决】
- C语言fread和fwrite的用法详解
- 更换计算机桌面背景的教案,桂科版三年级下册任务一 美化桌面背景免费教学设计...
- php中reset函数,PHP reset()函数
- emmet使用(HTML)
- oracle中orand使用,Postgres兼容Oracle研究——orafce调研
- python的字符编码叙述_Python: 熟悉又陌生的字符编码
- python升级版本命令_如何在python中安装和配置kivy库
- 面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...
- arm9 中断向量 重定位_关于STM32中断向量表的位置 、重定向问题