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)))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++测试cpu_测评丨NXP系列 LS1028 LS1046等产品网络性能测试

号外号外&#xff01;继OK1012A-C面市以来&#xff0c;飞凌嵌入式公司相继推出了OK1043A-C、OK1046A-C&#xff0c;以及最新上市的OK1028A-C&#xff0c;OK10XX系列产品也是一个大家族了。正所谓春兰秋菊&#xff0c;各擅胜场。下面小编就各产品的网络性能为您简单介绍一下。先…

四.Windows I/O模型之重叠IO(overlapped)模型

1.适用于除Windows CE之外的各种Windows平台.在使用这个模型之前应该确保该系统安装了Winsock2.重叠模型的基本设计原理是使用一个重叠的数据结构&#xff0c;一次投递一个或多个Winsock I/O请求。在重叠模型中&#xff0c;收发数据使用WSA开头的函数。2.WSA_FLAG_OVERLAPPED标…

python工作岗位要求_Python就业:Python就业岗位职能要求解析

我们来看一下某招聘网其中三个岗位的要求&#xff1a;Python数据分析任职要求&#xff1a;1.计算机、软件相关专业本科或以上学历&#xff0c;3年以上工作经历&#xff1b;2.了解python、JS开发言语&#xff1b;3.具有MySQL数据库设计与优化才能&#xff0c;了解mongoDB、mc、r…

Ajax--serialize应用表单数据序列化

一.jQueryAjax表单数据序列化 1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 </head>7 <body>8 <p id"results"><b>Results: </b> &…

vscode怎样导入数据_【Python开发】用VSCode+Jupyter notebook 编写 Python

版权声明&#xff1a;小博主水平有限&#xff0c;希望大家多多指导。本文仅代表作者本人观点。1、过去&#xff0c;想要在 VSCode 中运行 Jupyter notebook 需要安装一个 Neuron 扩展&#xff0c;我也装过&#xff0c;感觉很强大、很方便。不过现在&#xff0c;VSCode 中 Pytho…

msp430入门学习35

msp430的其他五 转载于:https://www.cnblogs.com/guochaoxxl/p/7820936.html

springboot怎么杀进程_全新Steam在线游戏 Among us太空狼人杀攻略

众多游戏爱好者已加入我们&#xff01;带你发现好游戏&#xff01;休闲娱乐小游戏&#xff01;点击下方↓↓↓↓"开始游戏"&#xff0c;赶紧进入吧&#xff01;&#xff01;戳“开始游戏”玩百款火爆小游戏&#xff01;《Among us》游戏好玩吗&#xff1f;《Among us…

kafka 怎么样连接图形化界面_从零开始搭建Kafka+SpringBoot分布式消息系统

前言由于kafka强依赖于zookeeper&#xff0c;所以需先搭建好zookeeper集群。由于zookeeper是由java编写的&#xff0c;需运行在jvm上&#xff0c;所以首先应具备java环境。(ps&#xff1a;默认您的centos系统可联网&#xff0c;本教程就不教配置ip什么的了)(ps2&#xff1a;没有…

《Iterative-GAN》的算法伪代码整理

花了一下午时间整理本人的论文Iterative-GAN的算法伪代码&#xff0c;由于篇幅较长&#xff0c;投会议方面的文章就不加入了&#xff0c;以后如果投期刊再说。留此存档。 转载于:https://www.cnblogs.com/punkcure/p/7821031.html

h5能调取摄像头吗_高质感的国产中型车,实力能比肩本田雅阁吗?带你看红旗H5...

中国品牌的豪华中型车&#xff0c;带你看红旗H5伴随着经济的快速发展&#xff0c;大家的钱包现在也是越来越鼓&#xff0c;也开始向往更加美好的生活。曾经很多人买车都是为了满足基本的代步需求&#xff0c;如今也开始在车辆的品质与行驶质感上有了更高要求。而为了迎合市场变…

python中update什么意思_如何在Python中更新字典中键的值?

我有一本代表书店的字典。键表示书名&#xff0c;值表示当前书籍的份数。从商店出售书时&#xff0c;书的份数必须减少。我已经写了一个代码来减少已售出图书的拷贝数&#xff0c;但在更新后打印词典时&#xff0c;我得到的是初始词典&#xff0c;而不是更新后的词典。ninput(&…

tess4j 注意事项

依赖&#xff1a; <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>2.0.1</version> <exclusions> <exclusion> <groupId>com.sun.jna</groupId>…

lstm网络_LSTM(长短期记忆网络)

在上篇文章一文看尽RNN(循环神经网络)中&#xff0c;我们对RNN模型做了总结。由于RNN也有梯度消失的问题&#xff0c;因此很难处理长序列的数据&#xff0c;大牛们对RNN做了改进&#xff0c;得到了RNN的特例LSTM(Long Short-Term Memory)&#xff0c;它可以避免常规RNN的梯度消…

随笔27 面向对象的五大基本原则

面向对象的五大基本原则 单一职责原则&#xff08;Single-Resposibility Principle&#xff09;&#xff1a;一个类&#xff0c;最好只做一件事&#xff0c;只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申&#xff0c;将职责定义为引起变化…

ant接口用什么天线_手机听收音机时,为什么必须用耳机作为天线?

名侦探柯基-十万个为什么 第七十六期起因&#xff0c;观看活着韩国丧尸电影时的一幕&#xff0c;刘亚仁想听电台广播&#xff0c;却无奈于所有设备都是无线的&#xff0c;由此疑惑到&#xff0c;只有插入有线的耳机&#xff0c;才能收听广播吗&#xff1f;耳机线就是天线&#…

qt c++ 图片预览_Qt多语言国际化

Qt附加工具介绍Qt Assistant&#xff08;Qt助手)Qt Linguist&#xff08;Qt语言家&#xff09;Qt Designer&#xff08;Qt设计师&#xff09;Qt AssistantQt Assistant是可配置且可重新发布的文档阅读器&#xff0c;可以方便地进行定制并与Qt应用程序一起重新发布。Qt Assistan…

Icon+启动图尺寸

1、LaunchImage 启动图 命名格式&#xff1a; 1x -> xxx.png 2x -> xxx2x.png Retina 4 -> xxx2x.png     转载于:https://www.cnblogs.com/z-z-z/p/7828082.html

智商情商哪个重要_《所谓逆商高,就是心态好》:逆商,比情商和智商更重要...

所谓“逆商”&#xff0c;是指人们遇到逆境时的应对能力&#xff0c;即战胜挫折、摆脱困境和超越困难的能力。我们一生会面临各种各样的难题&#xff0c;也许是考试失利&#xff0c;也许是和心爱的人分离&#xff0c;也许是工作上竞争失败……在失意的时候你会做何选择&#xf…

mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决.

MySQL中没有Rank排名函数&#xff0c;当我们需要查询排名时&#xff0c;只能使用MySQL数据库中的基本查询语句来查询普通排名。尽管如此&#xff0c;可不要小瞧基础而简单的查询语句&#xff0c;我们可以利用其来达到Rank函数一样的高级排名效果。在这里我用一个简单例子来实现…

__getattr__动态获取接口

# -*- coding:utf-8 -*- #在看廖雪峰的python3.5教学时&#xff0c;看到面向对象高级编程_定义类 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319098638265527beb24f7840aa97de564ccc7f20f6000 百度了很久没有找到想要的答案&a…