假设python只能简单处理+-/,不能处理括号。练习处理。练习正则。

网上有些无法很好处理负号,如下情况。暂未处理括号数字间缺少等情况。

(-1+(2-5(-1))(2-5))

-1+(2-5)*(2-5)

#/usr/bin/env python3

#mail infaaf@126.com

import re,sys

symbos_map={'+-':'-','++':'+','-+':'-','--':'+'}

# -1-(-1)*-1 =-2 #过程 -1--1*-1 => -1-- -1 => -1+-1 => -1-1 => -2

# 找最内括号,数字后面无符号,去除括号

# 找最内括号,有表示式,先乘除,乘除 从数字开始匹配, 1*-1 1*1

# 乘除完成,从左到右,带符号匹配。 -1+-1 不等于 -(1-1) ,需要处理-1-------1 情况(由于乘除时未处理符号)

def calc_element_3(v1,v2,symbol):

print("计算: %s,%s,%s"%(v1,v2,symbol))

'''带符号 + - * / '''

v1,v2=float(v1),float(v2)

if symbol=='+':return v1+v2

elif symbol =='-':return v1-v2

elif symbol == '*':return v1*v2

elif symbol =='/':return v1/v2

else:print(symbol);sys.exit()

def multi_divi(s):

''' s括号内表达式,用于处理乘除。找到1*-2,处理为-2 ,处理1次 '''

print("处理乘除: %s"%s)

re_seach_obj=re.search(r'([0-9.]+)([*/])([+-])?([0-9.]+)',s)

if re_seach_obj is not None:

s_match_str = re_seach_obj.group(0) # 1*-1

value1=re_seach_obj.group(1)

value2=re_seach_obj.group(4)

simblos=re_seach_obj.group(2)

simblo_ext=re_seach_obj.group(3)

ret=calc_element_3(value1,value2,simblos)

ret=simblo_ext+str(ret)

print(s_match_str,ret)

s=s.replace(s_match_str,ret)

return s

# res=multi_divi('-1-2*-2') # print(res)

def add_minu(s):

print("处理加减: %s"%s)

''' -1--1,1--1,-1+1,-1---1,-1---------1,用于从左往右处理加减,处理1次'''

if re.search(r'[*/]', s):

print("should do * / before + -: %s"%s)

sys.exit()

while re.search(r'[+\-*\\]{2,}',s): #-1-1 ,1+++++1 => -1-1 , 1+1

for symbos_key in symbos_map:

s=s.replace(symbos_key,symbos_map[symbos_key])

# print(s)

re_seach_obj = re.search(r'([+-]?[0-9.]+)([+-])([0-9.]+)', s)

if re_seach_obj:

s_match_str = re_seach_obj.group(0) # 1*-1

value1=re_seach_obj.group(1)

value2=re_seach_obj.group(3)

simblos=re_seach_obj.group(2)

ret=calc_element_3(value1,value2,simblos)

# print(s_match_str,ret)

s=s.replace(s_match_str,str(ret))

# print(s)

return s

# res=add_minu('1.0+1.5++++1')

def handler_expression(expression):

print("进入表达式处理%s"%expression)

while re.search('[*/]',expression):

expression=multi_divi(expression)

while re.search('[0-9.]+[+-]+[0-9.]+',expression):

expression=add_minu(expression)

return expression

# res=handler_expression('-1+---5*-2/-1++2+2+2') # print(res)

# a=handler_expression('1+2--5.0*-3.0')

# print(a)

def hadler_braces(s):

print(s)

flag=True

while flag:

re_obj=re.search('\([+\-*/0-9.]*\)',s)

if re_obj:

s_match_str=re_obj.group(0)

print("括号匹配: %s"%s_match_str)

if re.match('\([+\-]?([0-9.]*)\)',s_match_str):

print("仅剩余单个值: %s"%s_match_str)

s_match_str_match=re.match('\(([+\-]?[0-9.]*)\)',s_match_str).group(1)

s = s.replace(s_match_str, s_match_str_match)

print(s)

else:

print("调用处理%s"%s_match_str)

s_match_str_str=re.search('\(([+\-*/0-9.]*)\)',s).group(1)

ret=handler_expression(s_match_str_str)

s = s.replace(s_match_str, str(ret))

print(s)

else:

flag=False

return s

# no_braces_result=hadler_braces('(-1+(2-5*(-1))*(2-5))')

# result=handler_expression(no_braces_result)

# print(result)

if __name__ == '__main__':

while True:

exp=input("输入表达式: ")

exp=re.sub('\s','',exp)

no_braces_result=hadler_braces(str(exp))

result=handler_expression(no_braces_result)

print(result)

python题库刷题训练软件_刷题 -- python计算器练习题相关推荐

  1. python数据分析与发展常用哪些软件_分享一下Python数据分析常用的8款工具

    Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...

  2. python标准库导入语句有哪些_如何将python标准库缺失的进行导入?

    代码写的很多时候,如果我们需要一个内容,肯定是要将内容拆分的,然后进行导入,但是导入和最简单的复制,黏贴是一样的嘛?答案肯定不是啊,那要怎么将这些内容进行导入呢,下面小编就给大家整理出来,内容很少,大 ...

  3. 刷题神器怎么导入java,怎么导题库_有没有比较好的可以自己导入题库进行模拟考试练习的软件_淘题吧...

    ① 本人有一题库,怎么把里面的试题全部导出 题库都加密了,没有导出功能.只能固定抽题后,整理出来. ② 在线考试系统题库怎么导入数据库 优考试的考试系统导入题库是用word和excel的模板去编辑试题 ...

  4. python基本原理概论_优学院《2020年马克思主义基本原理概论题库(高职类)》查题教程2020高校邦《Python程序设计基础【实境编程】》答案完整...

    优学院<2020年马克思主义基本原理概论题库(高职类)>查题教程2020高校邦<Python程序设计基础[实境编程]>答案完整 更多相关问题 专业职业是相对以下哪点而言的(). ...

  5. JavaScript|免费导入题库,考试复习工具,刷题神器,支持导入excel题库【完全免费+提供源码】

    工具界面展示 点击这里下载源代码↓↓↓ 基于JS的导入EXCEL题库复习小工具_intitle:javascript搜题-Javascript文档类资源-CSDN下载 目录 一.工具使用说明 二.界面 ...

  6. 赛码行测题库_行测题库:行测数字推理模拟题2.22

    行测题库:行测数字推理模拟题 1.1,-5,10,10,40,( ) A.-35 B.50 C.135 D.280 2.-1,3,-3,-3,-9,( ) A.-9 B.-4 C.-14 D.-45 ...

  7. 2021年计算机应用基础统考题库,2021年7月计算机应用基础统考题库-网络教育统考计算机应用基础真题...

    2021年7月网络教育统考计算机应用基础统考题库现已更新完毕. 题库在覆盖率和通过率上,均有保障,前提为,获取题库后需复习才行. 计算机应用基础统考题库,单选题以及操作题均为重点必抽题,每道操作题均有 ...

  8. 中国移动计算机类行测题目,2019中国移动春招考试行测题库:行测常识判断模拟题(十三)...

    行测题库:行测常识判断模拟题 1. 下列有关生活常识的叙述正确的是: A.使用无磷洗衣粉是因为磷易造成环境水体富营养化,破坏水质 B.空调工作的时候有水流出而冰箱没有,由此可判断常见的家用空调和电冰箱 ...

  9. 二级MySQL,未来教育MySQL题库,15套试卷,sql题答案。

    未来教育MySQL题库,15套试卷,sql题答案. 一. 1.insert into tb_dept values('D4','公关部','Liming','010-82953306');2.alte ...

最新文章

  1. 剑指offer:连续子数组的最大和
  2. iphone ios 如何开发升级适配 iphone5 4inch
  3. mybatis多表新增如何获取主键ID
  4. oracle之trunc(sysdate)
  5. unity2d随机生成物体_2020 年最好用的一键生成设计神器,全在这里了!
  6. Mongoose aggregate 多表关联查询
  7. 计算机辅助功能包括什么,CAD软件是什么?有什么功能?
  8. 2017.3.23 特别行动队 思考记录
  9. 决策树CART算法讲解
  10. Java基础知识框图总结
  11. 如何实现快捷方式中的查找目标功能
  12. 宝峰uv5r怎么设置信道_宝峰5R说明书 及设置方法
  13. SpringBoot YML 配置ListBean
  14. als算法参数_协调过滤算法之ALS
  15. stm32看门狗定时器记录
  16. 2.15 随机存取存储器与只读存储器
  17. mysql reads sql data_mysql – CREATE FUNCTION错误“此函数没有确定,否SQL或READS SQL DATA”...
  18. 查询rssi指令_h3c无线控制器常用命令(wx)
  19. WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL
  20. Linux UVC driver 独立交叉编译记录

热门文章

  1. SQL中 char、varchar、text 和 nchar、nvarchar、ntext的区别
  2. 超级usb万能启动盘
  3. 程序员十大安全技巧(转)
  4. java的数组查找算法_java数组、排序算法、查找算法详解
  5. excel图片地址直接显示图_图片转表格基于百度AI
  6. 某系统有6台输出设备 有多个进程均需要使用2台_从零开始学K8s: 2.开发与部署方式的演变...
  7. android bitmap转图片_Android 这些 Drawable 你都会用吗?
  8. 蓄水池问题c语言编程,蓄水池大作战
  9. mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )
  10. Potplayer使用必看