zoukankan      html  css  js  c++  java
  • python学习计算器

    
    

    1、计算器程序开发环境:
    OS:64位Windows 7
    IDE:pycharm4.0.4
    python版本:3.5.1 32位

    2、计算器程序只做python学习使用,版权有作者所有,未经过作者本人同意,不得将此计算器程序应用于商业用途。

    
    

    3、计算器程序简述:

    
    

    a、本计算器程序可以实现+、-、*、/与小括号等数学运算
    b、计算器的计算优先级与实际相同,即小括号>乘与除>加与减

    
    


    4、使用方法

    
    

    IDE环境或者linux下运行confmanager.py

    5、*********着重说明************

    当前的代码存在bug,对于负数的部分,暂时没有办法处理,后续将优化。


    __author__
    = 'bruce' import re a = '1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))' def mainexecution(func):#迭代替换函数 minbracket = re.findall('\([^\(\)]+\)',func)#输出查询的列表,然后对列表内容进行判断 # print(minbracket) if minbracket == []:#列表为空,说明已经没有括号,只剩下加减乘除 print(func) mixexecution(func) return func else:#有括号,计算括号 print('需要计算的算式',minbracket[0]) mixreplace = mixexecution(minbracket[0].strip('()'))#调用运算,返回值赋给mixreplace print('算式计算出来的结果:',mixreplace) func1 = func.replace('('+minbracket[0].strip('()')+')',mixreplace)#将运算式加上括号,一起替换成运算后的结果 print('替换后的算式',func1) print('\n') return mainexecution(func1) def mixexecution(func):#运算函数,传入最小运算单元,返回运算结果 mixlist = re.findall('\d+(\.\d*)?\/[\-]?\d+(\.\d*)?',func)#输出查询的列表,然后对列表内容进行判断,除法 if mixlist == []:#代表除法法做完,做乘法 mixlist2 = re.findall('\d+(\.\d*)?\*[\-]?\d+(\.\d*)?',func)#输出查询的列表,然后对列表内容进行判断,乘法 if mixlist2 == []:#代表乘法做完,做减法 mixlist3 = re.findall('\d+(\.\d*)?\-\d+(\.\d*)?',func)#输出查询的列表,然后对列表内容进行判断,减法 if mixlist3 == []:#代表减法做完,做加法 mixlist4 = re.findall('\d+(\.\d*)?\+[\-]?\d+(\.\d*)?',func)#输出查询的列表,然后对列表内容进行判断,加法 if mixlist4 == []:#代表加法做完 # print('运算结果是',func) return func else: gg1 = re.search('\d+(\.\d*)?\+[\-]?\d+(\.\d*)?',func).group() gg = gg1.split('+') hh = float(gg[0])+float(gg[1]) func4 = func.replace(gg1,str(hh)) # print('加法部分----->',func4) return mixexecution(func4) else: ee1 = re.search('\d+(\.\d*)?\-\d+(\.\d*)?',func).group() ee = ee1.split('-') ff = float(ee[0])-float(ee[1]) func3 = func.replace(ee1,str(ff)) # print('减法部分----->',func3) return mixexecution(func3) else: bb1 = re.search('\d+(\.\d*)?\*[\-]?\d+(\.\d*)?',func).group() bb = bb1.split('*') dd = float(bb[0])*float(bb[1]) func2 = func.replace(bb1,str(dd)) # print('乘法部分----->',func2) return mixexecution(func2) else: aa1 = re.search('\d+(\.\d*)?\/[\-]?\d+(\.\d*)?',func).group() aa = aa1.split('/') cc = float(aa[0])/float(aa[1]) func1 = func.replace(aa1,str(cc)) # print('除法部分----->',func1) return mixexecution(func1) def mixchange(func): changelist = re.findall('\-\-',func) if changelist: func.replace('--','-') return func else: return func if __name__ == '__main__': print('元算式',a) print('-----------------------------------------------------------------------------') print('计算器得出的结果是:',eval(mainexecution(a))) print('正确结果是:') print(1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2)))
  • 相关阅读:
    【InnoDB】插入缓存,两次写,自适应hash索引
    【InnoDB】缓冲池
    P3371 【模板】单源最短路径(弱化版) 题解
    P1463 [POI2002][HAOI2007]反素数 题解
    CF701B Cells Not Under Attack 题解
    P1120 小木棍 [数据加强版] 题解
    P3951 小凯的疑惑 题解
    P1135 奇怪的电梯 题解
    P1748 H数 题解
    P3388 【模板】割点(割顶) 题解
  • 原文地址:https://www.cnblogs.com/mzpy1119/p/5197251.html
Copyright © 2011-2022 走看看