wxpython 二十四点界面 例子

还是初学者,来记录一下成长。

这是一个可以计算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版本,重新开始可以删掉二十四点界面再点开始。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值