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