Python实现的科学计算器功能示例
本文实例讲述了Python实现的科学计算器功能。分享给大家供大家参考,具体如下:
importwx importre importmath #beginwxGlade:extracode #endwxGlade ans=0 ts="" classMyFrame(wx.Frame): def__init__(self,*args,**kwds): #beginwxGlade:MyFrame.__init__ kwds["style"]=wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self,*args,**kwds) self.text_ctrl_1=wx.TextCtrl(self,-1,"",style=wx.TE_READONLY) self.text_ctrl_2=wx.TextCtrl(self,-1,"",style=wx.TE_READONLY) self.button_37=wx.Button(self,-1,"7") self.button_38=wx.Button(self,-1,"8") self.button_39=wx.Button(self,-1,"9") self.button_40=wx.Button(self,-1,"+") self.button_41=wx.Button(self,-1,"-") self.button_42=wx.Button(self,-1,"4") self.button_43=wx.Button(self,-1,"5") self.button_44=wx.Button(self,-1,"6") self.button_45=wx.Button(self,-1,"x") self.button_46=wx.Button(self,-1,"/") self.button_47=wx.Button(self,-1,"1") self.button_48=wx.Button(self,-1,"2") self.button_49=wx.Button(self,-1,"3") self.button_50=wx.Button(self,-1,"(") self.button_51=wx.Button(self,-1,")") self.button_52=wx.Button(self,-1,"0") self.button_53=wx.Button(self,-1,".") self.button_54=wx.Button(self,-1,"ans") self.button_55=wx.Button(self,-1,"clear") self.button_56=wx.Button(self,-1,"=") self.button_57=wx.Button(self,-1,"pi") self.button_58=wx.Button(self,-1,"e") self.button_59=wx.Button(self,-1,"1/x") self.button_60=wx.Button(self,-1,"x^2") self.button_61=wx.Button(self,-1,"x^y") self.button_62=wx.Button(self,-1,"sqrt") self.button_63=wx.Button(self,-1,"sin") self.button_64=wx.Button(self,-1,"cos") self.button_65=wx.Button(self,-1,"tan") self.button_66=wx.Button(self,-1,"log") self.button_67=wx.Button(self,-1,"ln") self.button_68=wx.Button(self,-1,"n!") self.button_69=wx.Button(self,-1,"mod") self.button_70=wx.Button(self,-1,"int") self.button_71=wx.Button(self,-1,"yu") self.button_72=wx.Button(self,-1,"|") self.button_73=wx.Button(self,-1,"~") self.button_74=wx.Button(self,-1,"xor") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON,self.bu37,self.button_37) self.Bind(wx.EVT_BUTTON,self.bu38,self.button_38) self.Bind(wx.EVT_BUTTON,self.bu39,self.button_39) self.Bind(wx.EVT_BUTTON,self.bu40,self.button_40) self.Bind(wx.EVT_BUTTON,self.bu41,self.button_41) self.Bind(wx.EVT_BUTTON,self.bu42,self.button_42) self.Bind(wx.EVT_BUTTON,self.bu43,self.button_43) self.Bind(wx.EVT_BUTTON,self.bu44,self.button_44) self.Bind(wx.EVT_BUTTON,self.bu45,self.button_45) self.Bind(wx.EVT_BUTTON,self.bu46,self.button_46) self.Bind(wx.EVT_BUTTON,self.bu47,self.button_47) self.Bind(wx.EVT_BUTTON,self.bu48,self.button_48) self.Bind(wx.EVT_BUTTON,self.bu49,self.button_49) self.Bind(wx.EVT_BUTTON,self.bu50,self.button_50) self.Bind(wx.EVT_BUTTON,self.bu51,self.button_51) self.Bind(wx.EVT_BUTTON,self.bu52,self.button_52) self.Bind(wx.EVT_BUTTON,self.bu53,self.button_53) self.Bind(wx.EVT_BUTTON,self.bu54,self.button_54) self.Bind(wx.EVT_BUTTON,self.bu55,self.button_55) self.Bind(wx.EVT_BUTTON,self.bu56,self.button_56) self.Bind(wx.EVT_BUTTON,self.bu57,self.button_57) self.Bind(wx.EVT_BUTTON,self.bu58,self.button_58) self.Bind(wx.EVT_BUTTON,self.bu59,self.button_59) self.Bind(wx.EVT_BUTTON,self.bu60,self.button_60) self.Bind(wx.EVT_BUTTON,self.bu61,self.button_61) self.Bind(wx.EVT_BUTTON,self.bu62,self.button_62) self.Bind(wx.EVT_BUTTON,self.bu63,self.button_63) self.Bind(wx.EVT_BUTTON,self.bu64,self.button_64) self.Bind(wx.EVT_BUTTON,self.bu65,self.button_65) self.Bind(wx.EVT_BUTTON,self.bu66,self.button_66) self.Bind(wx.EVT_BUTTON,self.bu67,self.button_67) self.Bind(wx.EVT_BUTTON,self.bu68,self.button_68) self.Bind(wx.EVT_BUTTON,self.bu69,self.button_69) self.Bind(wx.EVT_BUTTON,self.bu70,self.button_70) self.Bind(wx.EVT_BUTTON,self.bu71,self.button_71) self.Bind(wx.EVT_BUTTON,self.bu72,self.button_72) self.Bind(wx.EVT_BUTTON,self.bu73,self.button_73) self.Bind(wx.EVT_BUTTON,self.bu74,self.button_74) #endwxGlade self.Show(True) def__set_properties(self): #beginwxGlade:MyFrame.__set_properties self.SetTitle("PythonCalculaterbyCYG") self.text_ctrl_1.SetMinSize((500,30)) self.text_ctrl_2.SetMinSize((500,50)) self.button_37.SetMinSize((100,60)) self.button_38.SetMinSize((100,60)) self.button_39.SetMinSize((100,60)) self.button_40.SetMinSize((100,60)) self.button_41.SetMinSize((100,60)) self.button_42.SetMinSize((100,60)) self.button_43.SetMinSize((100,60)) self.button_44.SetMinSize((100,60)) self.button_46.SetMinSize((100,60)) self.button_45.SetMinSize((100,60)) self.button_47.SetMinSize((100,60)) self.button_48.SetMinSize((100,60)) self.button_49.SetMinSize((100,60)) self.button_50.SetMinSize((100,60)) self.button_51.SetMinSize((100,60)) self.button_52.SetMinSize((100,60)) self.button_53.SetMinSize((100,60)) self.button_54.SetMinSize((100,60)) self.button_55.SetMinSize((100,60)) self.button_56.SetMinSize((100,60)) self.button_57.SetMinSize((83,50)) self.button_58.SetMinSize((83,50)) self.button_59.SetMinSize((83,50)) self.button_60.SetMinSize((83,50)) self.button_61.SetMinSize((83,50)) self.button_62.SetMinSize((83,50)) self.button_63.SetMinSize((83,50)) self.button_64.SetMinSize((83,50)) self.button_65.SetMinSize((83,50)) self.button_66.SetMinSize((83,50)) self.button_67.SetMinSize((83,50)) self.button_68.SetMinSize((83,50)) self.button_69.SetMinSize((83,50)) self.button_70.SetMinSize((83,50)) self.button_71.SetMinSize((83,50)) self.button_72.SetMinSize((83,50)) self.button_73.SetMinSize((83,50)) self.button_74.SetMinSize((83,50)) #endwxGlade def__do_layout(self): #beginwxGlade:MyFrame.__do_layout sizer_2=wx.BoxSizer(wx.VERTICAL) sizer_3=wx.BoxSizer(wx.VERTICAL) grid_sizer_1=wx.GridSizer(4,5,0,0) grid_sizer_2=wx.GridSizer(3,6,0,0) sizer_3.Add(self.text_ctrl_2,0,0,0) sizer_3.Add(self.text_ctrl_1,0,0,0) grid_sizer_1.Add(self.button_37,0,0,0) grid_sizer_1.Add(self.button_38,0,0,0) grid_sizer_1.Add(self.button_39,0,0,0) grid_sizer_1.Add(self.button_40,0,0,0) grid_sizer_1.Add(self.button_41,0,0,0) grid_sizer_1.Add(self.button_42,0,0,0) grid_sizer_1.Add(self.button_43,0,0,0) grid_sizer_1.Add(self.button_44,0,0,0) grid_sizer_1.Add(self.button_45,0,0,0) grid_sizer_1.Add(self.button_46,0,0,0) grid_sizer_1.Add(self.button_47,0,0,0) grid_sizer_1.Add(self.button_48,0,0,0) grid_sizer_1.Add(self.button_49,0,0,0) grid_sizer_1.Add(self.button_50,0,0,0) grid_sizer_1.Add(self.button_51,0,0,0) grid_sizer_1.Add(self.button_52,0,0,0) grid_sizer_1.Add(self.button_53,0,0,0) grid_sizer_1.Add(self.button_54,0,0,0) grid_sizer_1.Add(self.button_55,0,0,0) grid_sizer_1.Add(self.button_56,0,0,0) grid_sizer_2.Add(self.button_57,0,0,0) grid_sizer_2.Add(self.button_58,0,0,0) grid_sizer_2.Add(self.button_59,0,0,0) grid_sizer_2.Add(self.button_60,0,0,0) grid_sizer_2.Add(self.button_61,0,0,0) grid_sizer_2.Add(self.button_62,0,0,0) grid_sizer_2.Add(self.button_63,0,0,0) grid_sizer_2.Add(self.button_64,0,0,0) grid_sizer_2.Add(self.button_65,0,0,0) grid_sizer_2.Add(self.button_66,0,0,0) grid_sizer_2.Add(self.button_67,0,0,0) grid_sizer_2.Add(self.button_68,0,0,0) grid_sizer_2.Add(self.button_69,0,0,0) grid_sizer_2.Add(self.button_70,0,0,0) grid_sizer_2.Add(self.button_71,0,0,0) grid_sizer_2.Add(self.button_72,0,0,0) grid_sizer_2.Add(self.button_73,0,0,0) grid_sizer_2.Add(self.button_74,0,0,0) sizer_3.Add(grid_sizer_1,1,wx.EXPAND,0) sizer_3.Add(grid_sizer_2,1,wx.EXPAND,0) sizer_2.Add(sizer_3,1,wx.EXPAND,0) self.SetSizer(sizer_2) sizer_2.Fit(self) self.Layout() #endwxGlade defbu37(self,event):#wxGlade:MyFrame.globalts ts+="7" self.text_ctrl_1.AppendText("7") event.Skip() defbu38(self,event):#wxGlade:MyFrame. globalts ts+="8" self.text_ctrl_1.AppendText("8") event.Skip() defbu39(self,event):#wxGlade:MyFrame. globalts ts+="9" self.text_ctrl_1.AppendText("9") event.Skip() defbu40(self,event):#wxGlade:MyFrame. globalts ts+="+" self.text_ctrl_1.AppendText("+") event.Skip() defbu41(self,event):#wxGlade:MyFrame. globalts ts+="-" self.text_ctrl_1.AppendText("-") event.Skip() defbu42(self,event):#wxGlade:MyFrame. globalts ts+="4" self.text_ctrl_1.AppendText("4") event.Skip() defbu43(self,event):#wxGlade:MyFrame. globalts ts+="5" self.text_ctrl_1.AppendText("5") event.Skip() defbu44(self,event):#wxGlade:MyFrame. globalts ts+="6" self.text_ctrl_1.AppendText("6") event.Skip() defbu45(self,event):#wxGlade:MyFrame. globalts ts+="*" self.text_ctrl_1.AppendText("*") event.Skip() defbu46(self,event):#wxGlade:MyFrame. globalts ts+="/" self.text_ctrl_1.AppendText("/") event.Skip() defbu47(self,event):#wxGlade:MyFrame. globalts ts+="1" self.text_ctrl_1.AppendText("1") event.Skip() defbu48(self,event):#wxGlade:MyFrame. globalts ts+="2" self.text_ctrl_1.AppendText("2") event.Skip() defbu49(self,event):#wxGlade:MyFrame. globalts ts+="3" self.text_ctrl_1.AppendText("3") event.Skip() defbu50(self,event):#wxGlade:MyFrame. globalts ts+="(" self.text_ctrl_1.AppendText("(") event.Skip() defbu51(self,event):#wxGlade:MyFrame. globalts ts+=")" self.text_ctrl_1.AppendText(")") event.Skip() defbu52(self,event):#wxGlade:MyFrame. globalts ts+="0" self.text_ctrl_1.AppendText("0") event.Skip() defbu53(self,event):#wxGlade:MyFrame. globalts ts+="." self.text_ctrl_1.AppendText(".") event.Skip() defbu54(self,event):#wxGlade:MyFrame. globalts ts+="ans" self.text_ctrl_1.AppendText("ans") event.Skip() defbu55(self,event):#wxGlade:MyFrame. globalts self.text_ctrl_1.Clear() self.text_ctrl_2.Clear() ans=0 ts="" event.Skip() defminus_operation(self,expresstion): minus_operators=re.split("-",expresstion) calc_list=re.findall("[0-9]",expresstion) ifminus_operators[0]=="": calc_list[0]='-%s'%calc_list[0] res=reduce(lambdax,y:float(x)-float(y),calc_list) returnres defdel_duplicates(self,ts): ts=ts.replace("++","+") ts=ts.replace("--","-") ts=ts.replace("+-","-") ts=ts.replace("--","+") ts=ts.replace('--',"+") returnts defmutiply_dividend(self,expresstion): calc_list=re.split("[*/]",expresstion) operators=re.findall("[*/]",expresstion) res=None forindex,iinenumerate(calc_list): ifres: ifoperators[index-1]=='*': res*=float(i) elifoperators[index-1]=='/': res/=float(i) else: res=float(i) returnres defspecial_features(self,plus_and_minus_operators,multiply_and_dividend): forindex,iinenumerate(multiply_and_dividend): i=i.strip() ifi.endswith("*")ori.endswith("/"): multiply_and_dividend[index]=multiply_and_dividend[index]+plus_and_minus_operators[index]+\ multiply_and_dividend[index+1] delmultiply_and_dividend[index+1] delplus_and_minus_operators[index] returnplus_and_minus_operators,multiply_and_dividend defminus_special(self,operator_list,calc_list): forindex,iinenumerate(calc_list): ifi=='': calc_list[index+1]=i+calc_list[index+1].strip() deffigure_up(self,ts): ts=ts.strip("()") ts=self.del_duplicates(ts) plus_and_minus_operators=re.findall("[+-]",ts) multiply_and_dividend=re.split("[+-]",ts) iflen(multiply_and_dividend[0].strip())==0: multiply_and_dividend[1]=plus_and_minus_operators[0]+multiply_and_dividend[1] delmultiply_and_dividend[0] delplus_and_minus_operators[0] plus_and_minus_operators,multiply_and_dividend=self.special_features(plus_and_minus_operators, multiply_and_dividend) forindex,iinenumerate(multiply_and_dividend): ifre.search("[*/]",i): sub_res=self.mutiply_dividend(i) multiply_and_dividend[index]=sub_res #print(multiply_and_dividend,plus_and_minus_operators) final_res=None forindex,iteminenumerate(multiply_and_dividend): iffinal_res: ifplus_and_minus_operators[index-1]=='+': final_res+=float(item) elifplus_and_minus_operators[index-1]=='-': final_res-=float(item) else: final_res=float(item) returnfinal_res defbu56(self,event):#wxGlade:MyFrame. globalans globalts ifre.search("pi",ts): lists=re.findall("pi",ts) foriinrange(0,len(lists)): te=str(math.pi) self.text_ctrl_2.SetValue(te) ts=re.sub("pi",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("e",ts): lists=re.findall("e",ts) foriinrange(0,len(lists)): te=str(math.e) self.text_ctrl_2.SetValue(te) ts=re.sub("e",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("sin.*\)",ts): lists=re.findall("sin(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.sin(te)) self.text_ctrl_2.SetValue(te) ts=re.sub("sin.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("cos.*\)",ts): lists=re.findall("cos(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.cos(te)) self.text_ctrl_2.SetValue(te) ts=re.sub("cos.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("tan.*\)",ts): lists=re.findall("tan(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.tan(te)) self.text_ctrl_2.SetValue(te) ts=re.sub("tan.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("ln.*\)",ts): lists=re.findall("ln(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.log(te)) self.text_ctrl_2.SetValue(te) ts=re.sub("ln.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("log.*\)",ts): lists=re.findall("log(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.log(te)/math.log(10)) self.text_ctrl_2.SetValue(te) ts=re.sub("log.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("sqrt.*\)",ts): lists=re.findall("sqrt(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=str(math.sqrt(te)) self.text_ctrl_2.SetValue(te) ts=re.sub("sqrt.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("int.*\)",ts): lists=re.findall("int(.+?)",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=int(te) te=str(te) self.text_ctrl_2.SetValue(te) ts=re.sub("int.*?\)",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("ans",ts): lists=re.findall("ans",ts) foriinrange(0,len(lists)): te=str(ans) self.text_ctrl_2.SetValue(te) ts=re.sub("ans",te,ts,1) #self.text_ctrl_1.SetValue(ts) ifre.search("?−?\d∗\.?\d∗?\^?−?\d∗\.?\d∗?",ts): lists1=re.findall("?(−?\d∗\.?\d∗?)?\^",ts) lists2=re.findall("\^?(−?\d∗\.?\d∗)?",ts) foriinrange(0,len(lists1)): te1=float(lists1[i]) te2=float(lists2[i]) #printte1 #printte2 te=math.pow(te1,te2) te=str(te) self.text_ctrl_2.SetValue(te) ts=re.sub("?[0−9]∗\.?[0−9]∗??\^?[0−9]∗\.?[0−9]∗?",te,ts,1) #self.text_ctrl_1.SetValue(ts) #ts=re.sub("?−?\d∗\.?\d∗?\^?−?\d∗\.?\d∗??",te,ts,1) ifre.search("?−?\d∗?\!",ts): lists=re.findall("?(−?\d+?)?\!",ts) foriinrange(0,len(lists)): te=float(lists[i]) te=math.factorial(te) te=str(te) self.text_ctrl_2.SetValue(te) ts=re.sub("?−?\d+??\!",te,ts,1) #self.text_ctrl_1.SetValue(ts) #printts flag=True whileflag: m=re.search("[()]∗",ts) ifm: sub_res=self.figure_up(m.group()) ts=ts.replace(m.group(),str(sub_res)) else: ans=self.figure_up(ts) flag=False self.text_ctrl_2.SetValue(str(ans)) #ans= #self.text_ctrl_2.SetValue(str(ans)) #self.text_ctrl_1.Clear() event.Skip() defbu57(self,event):#wxGlade:MyFrame. globalts ts+="pi" self.text_ctrl_1.AppendText("pi") event.Skip() defbu58(self,event):#wxGlade:MyFrame. globalts ts+="e" self.text_ctrl_1.AppendText("e") event.Skip() defbu59(self,event):#wxGlade:MyFrame. globalts ts+="^(-1)" self.text_ctrl_1.AppendText("^(-1)") event.Skip() defbu60(self,event):#wxGlade:MyFrame. globalts ts+="^2" self.text_ctrl_1.AppendText("^2") event.Skip() defbu61(self,event):#wxGlade:MyFrame. globalts ts+="^" self.text_ctrl_1.AppendText("^") event.Skip() defbu62(self,event):#wxGlade:MyFrame. globalts ts+="sqrt(" self.text_ctrl_1.AppendText("sqrt(") event.Skip() defbu63(self,event):#wxGlade:MyFrame. globalts ts+="sin(" self.text_ctrl_1.AppendText("sin(") event.Skip() defbu64(self,event):#wxGlade:MyFrame. globalts ts+="cos(" self.text_ctrl_1.AppendText("cos(") event.Skip() defbu65(self,event):#wxGlade:MyFrame#. globalts ts+="tan(" self.text_ctrl_1.AppendText("tan(") event.Skip() defbu66(self,event):#wxGlade:MyFrame. globalts ts+="log(" self.text_ctrl_1.AppendText("log(") event.Skip() defbu67(self,event):#wxGlade:MyFrame. globalts ts+="ln(" self.text_ctrl_1.AppendText("ln(") event.Skip() defbu68(self,event):#wxGlade:MyFrame. globalts ts+="!" self.text_ctrl_1.AppendText("!") event.Skip() defbu69(self,event):#wxGlade:MyFrame. globalts ts+="m" self.text_ctrl_1.AppendText("m")#qumo event.Skip() defbu70(self,event):#wxGlade:MyFrame. globalts ts+="int(" self.text_ctrl_1.AppendText("int(") event.Skip() defbu71(self,event):#wxGlade:MyFrame. globalts ts+="u" self.text_ctrl_1.AppendText("u")#yu event.Skip() defbu72(self,event):#wxGlade:MyFrame. globalts ts+="|" self.text_ctrl_1.AppendText("|")#huo event.Skip() defbu73(self,event):#wxGlade:MyFrame. globalts ts+="n(" self.text_ctrl_1.AppendText("n(")#fei event.Skip() defbu74(self,event):#wxGlade:MyFrame. globalts ts+="x" self.text_ctrl_1.AppendText("x")#yihuo event.Skip() #endofclassMyFrame if__name__=="__main__": app=wx.App(False) myframe=MyFrame(None) app.MainLoop()
PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:
在线一元函数(方程)求解计算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科学计算器在线使用_高级计算器在线计算:
http://tools.jb51.net/jisuanqi/jsqkexue
在线计算器_标准计算器:
http://tools.jb51.net/jisuanqi/jsq
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。