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程序设计有所帮助。