还是初学者,来记录一下成长。
这是一个可以计算24点的程序,写完点完成就可以。
挺有意思的程序(吧......)
import wx class twenty_points(wx.App): def OnInit(self): import wx frame=wx.Frame(parent=None) panel=wx.Panel(frame,-1) self.buttonfir=wx.Button(panel,-1,'开始',pos=(130,110)) self.Bind(wx.EVT_BUTTON, self.main, self.buttonfir) frame.Show() return True def main(self,event): import wx mainframe=wx.Frame(None,size=(450,550)) panel=wx.Panel(mainframe) btn1 = wx.Button(panel, label="1", pos=(0, 300), size=(100, 100)) # 设置按钮 self.Bind(wx.EVT_BUTTON, self.one, btn1) # 按钮绑定 btn1.SetBackgroundColour((255, 222, 173)) # 按钮颜色 btn2 = wx.Button(panel, label="2", pos=(100, 300), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.two, btn2) btn2.SetBackgroundColour((255, 222, 173)) btn3 = wx.Button(panel, label="3", pos=(200, 300), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.three, btn3) btn3.SetBackgroundColour((255, 222, 173)) btn4 = wx.Button(panel, label="4", pos=(0, 200), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.four, btn4) btn4.SetBackgroundColour((255, 222, 173)) btn5 = wx.Button(panel, label="5", pos=(100, 200), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.five, btn5) btn5.SetBackgroundColour((255, 222, 173)) btn6 = wx.Button(panel, label="6", pos=(200, 200), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.six, btn6) btn6.SetBackgroundColour((255, 222, 173)) btn7 = wx.Button(panel, label="7", pos=(0, 100), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.seven, btn7) btn7.SetBackgroundColour((255, 222, 173)) btn8 = wx.Button(panel, label="8", pos=(100, 100), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.eight, btn8) btn8.SetBackgroundColour((255, 222, 173)) btn9 = wx.Button(panel, label="9", pos=(200, 100), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.nine, btn9) btn9.SetBackgroundColour((255, 222, 173)) btn0 = wx.Button(panel, label="0", pos=(0, 400), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.zero, btn0) btn0.SetBackgroundColour((255, 222, 173)) btnplus = wx.Button(panel, label="+", pos=(300, 400), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.plus, btnplus) btnplus.SetBackgroundColour((240, 255, 255)) btnminus = wx.Button(panel, label="-", pos=(300, 300), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.minus, btnminus) btnminus.SetBackgroundColour((240, 255, 255)) btnmultiply = wx.Button(panel, label="*", pos=(300, 200), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.multiply, btnmultiply) btnmultiply.SetBackgroundColour((240, 255, 255)) btndivide = wx.Button(panel, label="/", pos=(300, 100), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.divide, btndivide) btndivide.SetBackgroundColour((240, 255, 255)) btnequal = wx.Button(panel, label="完成", pos=(200, 400), size=(100, 100)) self.Bind(wx.EVT_BUTTON, self.equal, btnequal) btnequal.SetBackgroundColour((240, 255, 255)) btnleft = wx.Button(panel, label="(", pos=(0, 50), size=(100, 50)) self.Bind(wx.EVT_BUTTON, self.left, btnleft) btnleft.SetBackgroundColour((240, 255, 255)) btnright = wx.Button(panel, label=")", pos=(100, 50), size=(100, 50)) self.Bind(wx.EVT_BUTTON, self.right, btnright) btnright.SetBackgroundColour((240, 255, 255)) btnbackspace = wx.Button(panel, label="back", pos=(200, 50), size=(100, 50)) self.twresult=self.twfopo2() self.Bind(wx.EVT_BUTTON, self.backspace, btnbackspace) btnbackspace.SetBackgroundColour((240, 255, 255)) self.titel=wx.StaticText(panel,-1,f'{self.twresult[0]}',pos=(0,0)) self. inputField=wx.TextCtrl(panel,pos=(0,20),size=(180,30)) self.calculation = '' self.panel=panel mainframe.Show() return True ''' 定义每一个按钮的操作 ''' def one(self, event): self.calculation = self.calculation + "1" self.inputField.SetValue(self.calculation) def two(self, event): self.calculation = self.calculation + "2" self.inputField.SetValue(self.calculation) def three(self, event): self.calculation = self.calculation + "3" self.inputField.SetValue(self.calculation) def four(self, event): self.calculation = self.calculation + "4" self.inputField.SetValue(self.calculation) def five(self, event): self.calculation = self.calculation + "5" self.inputField.SetValue(self.calculation) def six(self, event): self.calculation = self.calculation + "6" self.inputField.SetValue(self.calculation) def seven(self, event): self.calculation = self.calculation + "7" self.inputField.SetValue(self.calculation) def eight(self, event): self.calculation = self.calculation + "8" self.inputField.SetValue(self.calculation) def nine(self, event): self.calculation = self.calculation + "9" self.inputField.SetValue(self.calculation) def zero(self, event): self.calculation = self.calculation + "0" self.inputField.SetValue(self.calculation) def clear(self, event): self.calculation = "" self.inputField.SetValue(self.calculation) def plus(self, event): self.calculation = self.calculation + "+" self.inputField.SetValue(self.calculation) def minus(self, event): self.calculation = self.calculation + "-" self.inputField.SetValue(self.calculation) def multiply(self, event): self.calculation = self.calculation + "*" self.inputField.SetValue(self.calculation) def divide(self, event): self.calculation = self.calculation + "/" self.inputField.SetValue(self.calculation) def left(self, event): self.calculation = self.calculation + "(" self.inputField.SetValue(self.calculation) def right(self, event): self.calculation = self.calculation + ")" self.inputField.SetValue(self.calculation) def backspace(self, event): self.calculation = self.calculation[0:-1:1] self.inputField.SetValue(self.calculation) def equal(self, event): import re try: result2 = eval(self.calculation) resultlist_in=[] resultlist_in = re.findall(r"\d", self.calculation) if resultlist_in in self.twresult[2] and result2 == 24: self.inputField.SetValue('对了') else: self.inputField.SetValue(f'错了,答案是{self.twresult[1][0]}') # 计算式求值 # self.inputField.SetValue(str(self.twresult[1])) # 输出框值为结果 except Exception as e: self.inputField.SetValue('Input Illegal') print(e) return True finally: self.calcuation = "" '''定义两个二十四点类''' def twfopo(self,rans1): import re numberlist=[]#四个数字,能否计算出24 result = []#结果,是否能得24 signlist = ['+', "-", '*', '/','','(',')'] for a in range(4): for b in range(4): for c in range(4): for d in range(5): if d==0:#判断带括号的情况 strposture3 = '('+rans1[0] + signlist[a] + rans1[1] + signlist[b] + rans1[2] + ')'+signlist[c] + rans1[3] if d==1: strposture3 = '('+rans1[0] + signlist[a] + rans1[1] + ')'+ signlist[b] + rans1[2] + signlist[c] + rans1[3] if d==2: strposture3 = '('+rans1[0] + signlist[a] + rans1[1] + ')'+ signlist[b] + '('+rans1[2] + signlist[c] + rans1[3] +')' if d==3: strposture3 = rans1[0] + signlist[a] + rans1[1] + signlist[b] +rans1[2] + signlist[c] + rans1[3] if d==4:#没有括号的情况 strposture3 = rans1[0] + signlist[a] + rans1[1] + signlist[b] + '('+rans1[2] + signlist[c] + rans1[3]+')' middel = re.search(r"\/\(.*?\)", strposture3) if '/0' in strposture3: continue if middel: middel1 = middel.group(0) middel2=re.search(r"\(.*?\)", middel1) middel3=middel2.group(0) if eval(middel3)==0: continue#其实直接错误处理就行了,主要判断是不是除以0 res = eval(strposture3)#计=算一下 if int(res) == 24: result.append(strposture3) numberlist = rans1[:] self.result=result return numberlist,self.result def twfopo2(self): import random import re resultlist=[] a=1#循环条件 while a==1: a = 1 ran1=[] # ran1=['9', '2', '10', '7'] for i in range(4): ran1.append(str(random.randint(1, 9))) ran2=ran1[:] ranlist=[] for i in range(24):#一共有二十四个顺序 random.shuffle(ran2) if ran2 in ranlist: for e in range(i*3): random.shuffle(ran1) if not(ran1 in ranlist): ranlist.append(ran1[:]) break else: ranlist.append(ran2[:]) for i in range(len(ranlist)): twfopo1=self.twfopo(ranlist[i]) if twfopo1[1]!=[]:#如果是24 for i in range(len(twfopo1[1])): resultlist.append(twfopo1[1][:][i]) numberlist1=ran1 return numberlist1,resultlist,ranlist#返回结果 a=2 #约等于弹退出循环 if i==len(ranlist)-1: break if __name__ == '__main__': frame = twenty_points() frame.MainLoop()
用上面四个数字算24点就可以了。
还是1.0版本,重新开始可以删掉二十四点界面再点开始。