这是tkinter的代码,command参数表示按钮对应的动作,这个参数是个函数
# 操作符按钮 self.btn_add = tk.Button(self.tkwindow, text='+', command=self.command_add) self.btn_add.pack(padx=1, side='left') self.btn_minus = tk.Button(self.tkwindow, text='-', command=self.command_minus) self.btn_minus.pack(padx=1, side='left') self.btn_multiply = tk.Button(self.tkwindow, text='*', command=self.command_multipy) self.btn_multiply.pack(padx=1, side='left') self.btn_divide = tk.Button(self.tkwindow, text='/', command=self.command_divide) self.btn_divide.pack(padx=1, side='left') ''' 省略 ''' def command_add(self): if self.op_can_use: self.op_now = '+' self.op_pressed = True def command_minus(self): if self.op_can_use: self.op_now = '-' self.op_pressed = True def command_multipy(self): if self.op_can_use: self.op_now = '*' self.op_pressed = True def command_divide(self): if self.op_can_use: self.op_now = '/' self.op_pressed = True
但这4个command的函数几乎长得一模一样啊,有四个还好,如果有十几个怎么办,能不能精简点
def command_op(self, op): if self.op_can_use: self.op_now = op self.op_pressed = True def command_add(self): return self.command_op('+') def command_minus(self): return self.command_op('-') def command_multipy(self): return self.command_op('*') def command_divide(self): return self.command_op('/')
和dict配合使用
self.opdict = {'+': add, '-': minus, '*': multiply, '/': divide} #这是调用,根据op_now选择对应的函数,代替if判断 self.opnum = self.opdict[self.op_now](self.opnum, self.num_temp)[0]
全部代码,计算24点,用tkinter做了界面,两个文件一个界面,一个计算24点的函数
# enconding:utf-8 # file point24/gui import tkinter as tk import random from point24.bk import cal_24point, add, minus, multiply, divide class Window: def __init__(self, title='24点', width=650, height=400): self.w = width self.h = height self.tkwindow = tk.Tk(className=title) self.opdict = {'+': add, '-': minus, '*': multiply, '/': divide} self.init_status() self.add_compnent() def init_status(self): self.op_pressed = False self.op_now = '' self.opnum = 0 self.num_temp = 0 self.num_count = 0 self.op_can_use = False self.btn_num_temp_used = False def fournumber(self): TEN_OR_K = 10 self.num1 = random.randint(1, TEN_OR_K) self.num2 = random.randint(1, TEN_OR_K) self.num3 = random.randint(1, TEN_OR_K) self.num4 = random.randint(1, TEN_OR_K) def add_compnent(self): B_WIDTH = 6 B_HEIGHT = 5 self.label_ans = tk.Label(text="answer", fg="black", bg="white") self.label_ans.pack() # 数字按钮 self.fournumber() self.btn_num1 = tk.Button(self.tkwindow, text=self.num1, command=self.command_num1, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_num1.pack(side='left') self.btn_num2 = tk.Button(self.tkwindow, text=self.num2, command=self.command_num2, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_num2.pack(side='left') self.btn_num3 = tk.Button(self.tkwindow, text=self.num3, command=self.command_num3, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_num3.pack(side='left') self.btn_num4 = tk.Button(self.tkwindow, text=self.num4, command=self.command_num4, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_num4.pack(side='left') self.btn_num_temp = tk.Button(self.tkwindow, text=self.num_temp, command=self.command_num_temp, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_num_temp.pack(side='bottom') # 操作符按钮 self.btn_add = tk.Button(self.tkwindow, text='+', command=self.command_add, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_add.pack(padx=1, side='left') self.btn_minus = tk.Button(self.tkwindow, text='-', command=self.command_minus, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_minus.pack(padx=1, side='left') self.btn_multiply = tk.Button(self.tkwindow, text='*', command=self.command_multipy, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_multiply.pack(padx=1, side='left') self.btn_divide = tk.Button(self.tkwindow, text='/', command=self.command_divide, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_divide.pack(padx=1, side='left') # 功能按钮 self.btn_change = tk.Button(self.tkwindow, text='换一组', command=self.command_change, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_change.pack(padx=1, side='right') self.btn_answer = tk.Button(self.tkwindow, text='显示答案', command=self.command_answer, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_answer.pack(padx=1, side='right') self.btn_clear = tk.Button(self.tkwindow, text='清除', command=self.command_clear, width=B_WIDTH, height=B_HEIGHT,relief='groove') self.btn_clear.pack(padx=1, side='right') # 一个数字只能按一次,按错了用clear重来 def command_clear(self): self.btn_num1['state'] = 'active' self.btn_num2['state'] = 'active' self.btn_num3['state'] = 'active' self.btn_num4['state'] = 'active' self.btn_num_temp['state'] = 'active' self.btn_num_temp['text'] = '0' self.label_ans['text'] = 'answer' self.init_status() def command_answer(self): ans = cal_24point(self.num1, self.num2, self.num3, self.num4) self.label_ans['text'] = str(ans) def command_change(self): self.fournumber() self.btn_num1['text'] = self.num1 self.btn_num2['text'] = self.num2 self.btn_num3['text'] = self.num3 self.btn_num4['text'] = self.num4 self.command_clear() def command_op(self, op): if self.op_can_use: self.op_now = op self.op_pressed = True def command_add(self): return self.command_op('+') def command_minus(self): return self.command_op('-') def command_multipy(self): return self.command_op('*') def command_divide(self): return self.command_op('/') def command_num_temp(self): if self.op_pressed: self.opnum = self.opdict[self.op_now](self.opnum, self.num_temp)[0] self.btn_num_temp['text'] = self.opnum self.num_temp = self.opnum else: self.opnum = self.num_temp print(self.opnum) self.op_pressed = False self.btn_num_temp['state'] = 'disabled' if self.opnum == 24: self.label_ans['text'] = 'right' def command_numwhich(self, num, btn_num): if self.op_pressed: self.opnum = self.opdict[self.op_now](self.opnum, num)[0] if not self.btn_num_temp_used: self.btn_num_temp['text'] = self.opnum self.num_temp = self.opnum self.btn_num_temp_used = True else: self.opnum = num print(self.opnum) self.op_pressed = False btn_num['state'] = 'disabled' self.op_can_use = True self.num_count += 1 if self.opnum == 24 and self.num_count ==4: self.label_ans['text'] = 'right' def command_num1(self): return self.command_numwhich(self.num1, self.btn_num1) def command_num2(self): return self.command_numwhich(self.num2, self.btn_num2) def command_num3(self): return self.command_numwhich(self.num3, self.btn_num3) def command_num4(self): return self.command_numwhich(self.num4, self.btn_num4) def center(self): ws = self.tkwindow.winfo_screenwidth() hs = self.tkwindow.winfo_screenheight() x = int((ws/2)-(self.w/2)) y = int((hs/2)-(self.h/2)) self.tkwindow.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y)) def loop(self): self.tkwindow.resizable(False, False) self.center() self.tkwindow.mainloop() # ##############################run################################## w = Window() w.loop()
# encoding:utf-8 # file point24/bk import itertools import random def add(a, b): return a+b, str(a)+'+'+str(b)+'='+str(a+b) def minus(a, b): # 打印答案时不要有负数 if a<b: return 9999, 'no' return a-b, str(a)+'-'+str(b)+'='+str(a-b) def multiply(a, b): return a*b, str(a)+'*'+str(b)+'='+str(a*b) def divide(a, b): if b == 0: return 9999, 'no' return a/b, str(a)+'/'+str(b)+'='+str(a/b) def cal_24point(a, b, c, d): # a, b, c, d的排列组合 permutation_list = list(itertools.permutations([a, b, c, d], 4)) # 加减乘除 排列组合 op_list = list(itertools.permutations([add, minus, multiply, divide], 4)) # pro1 到 pro5包装函数 # ((a, b), c), d def pro1(op1, op2, op3): m = op1(pmt[0], pmt[1]) n = op2(m[0], pmt[2]) result = op3(n[0], pmt[3]) if result[0] == 24: #print(m[1], n[1], result[1]) return (m[1], n[1], result[1]) # (c, (a, b)), d def pro2(op1, op2, op3): m = op1(pmt[0], pmt[1]) n = op2(pmt[2] , m[0]) result = op3(n[0], pmt[3]) if result[0] == 24: #print(m[1], n[1], result[1]) return (m[1], n[1], result[1]) # d, ((a, b), c) def pro3(op1, op2, op3): m = op1(pmt[0], pmt[1]) n = op2(m[0], pmt[2]) result = op3(pmt[3], n[0]) if result[0] == 24: #print(m[1], n[1], result[1]) return (m[1], n[1], result[1]) # d, (c, (a, b)) def pro4(op1, op2, op3): m = op1(pmt[0], pmt[1]) n = op2(pmt[2], m[0]) result = op3(pmt[3], n[0]) if result[0] == 24: #print(m[1], n[1], result[1]) return (m[1], n[1], result[1]) # (a b)(c d) def pro5(op1, op2, op3): m = op1(pmt[0], pmt[1]) n = op2(pmt[2], pmt[3]) result = op3(n[0], m[0]) if result[0] == 24: #print(m[1], n[1], result[1]) return (m[1], n[1], result[1]) for pmt in permutation_list: for op in op_list: # 相同运算符 if pro1(op[0], op[0], op[0]): return pro1(op[0], op[0], op[0]) if pro2(op[0], op[0], op[0]): return pro2(op[0], op[0], op[0]) if pro3(op[0], op[0], op[0]): return pro3(op[0], op[0], op[0]) if pro4(op[0], op[0], op[0]): return pro4(op[0], op[0], op[0]) if pro5(op[0], op[0], op[0]): return pro5(op[0], op[0], op[0]) # ((a, b), c), d if pro1(op[0], op[1], op[2]): return pro1(op[0], op[1], op[2]) if pro1(op[0], op[1], op[1]): return pro1(op[0], op[1], op[1]) if pro1(op[0], op[0], op[1]): return pro1(op[0], op[0], op[1]) if pro1(op[0], op[1], op[0]): return pro1(op[0], op[1], op[0]) # (c, (a, b)), d if pro2(op[0], op[1], op[2]): return pro2(op[0], op[1], op[2]) if pro2(op[0], op[1], op[1]): return pro2(op[0], op[1], op[1]) if pro2(op[0], op[0], op[1]): return pro2(op[0], op[0], op[1]) if pro2(op[0], op[1], op[0]): return pro2(op[0], op[1], op[0]) # d, ((a, b), c) if pro3(op[0], op[1], op[2]): return pro3(op[0], op[1], op[2]) if pro3(op[0], op[1], op[1]): return pro3(op[0], op[1], op[1]) if pro3(op[0], op[0], op[1]): return pro3(op[0], op[0], op[1]) if pro3(op[0], op[1], op[0]): return pro3(op[0], op[1], op[0]) # d, (c, (a, b)) if pro4(op[0], op[1], op[2]): return pro4(op[0], op[1], op[2]) if pro4(op[0], op[1], op[1]): return pro4(op[0], op[1], op[1]) if pro4(op[0], op[0], op[1]): return pro4(op[0], op[0], op[1]) if pro4(op[0], op[1], op[0]): return pro4(op[0], op[1], op[0]) # (a b)(c d) if pro5(op[0], op[1], op[2]): return pro5(op[0], op[1], op[2]) if pro5(op[0], op[1], op[1]): return pro5(op[0], op[1], op[1]) if pro5(op[0], op[0], op[1]): return pro5(op[0], op[0], op[1]) if pro5(op[0], op[1], op[0]): return pro5(op[0], op[1], op[0]) print('no result') return None # ---------------------------test--------------------------------- ''' for n in range(30): a = random.randint(1,13) b = random.randint(1,13) c = random.randint(1,13) d = random.randint(1,13) print(a, b, c, d) print(cal_24point(a, b, c, d),'*'*10) '''
界面是难看了点 ,哈哈哈哈
相关推荐
4. **函数**:Python中的函数定义使用`def`关键字,支持默认参数、可变参数以及关键字参数。另外,还有内置函数如`len()`、`type()`等。 5. **模块和包**:Python通过模块(module)组织代码,使用`import`语句导入...
4. **函数**:Python中的函数定义使用`def`关键字,可以有参数和返回值。函数可以提高代码的可重用性和模块化。 5. **模块与包**:Python有庞大的标准库和第三方库,如Numpy用于数值计算,Pandas用于数据处理,...
1. **语法结构**:Python的语法简洁且易于理解,如缩进代替大括号表示代码块,使用`print()`函数进行输出,以及变量声明的灵活性等。初学者需要掌握如何编写有效的Python语句,包括赋值、条件判断、循环结构以及函数...
1. **语法基础**:Python 以其简洁明了的语法闻名,如缩进代替大括号表示代码块,使用 `for` 和 `while` 循环,以及 `if-else` 语句等。在Python 2.7.15中,函数定义使用 `def` 关键字,类定义使用 `class`。 2. **...
在Python中,函数是一等公民,可以作为参数传递,也可以作为返回值。函数定义使用def关键字,如`def my_function(param1, param2):`。Python还支持匿名函数,即lambda函数,适用于简单的一行计算。 控制流程是编程...
5. **控制结构**:Python的控制结构包括条件语句(if-else, if-elif-else)、循环(for, while)和异常处理(try-except)。这些结构用于控制程序流程,实现条件判断和重复执行。 6. **函数与模块**:Python中的...
* Python 中使用 `elif` 语句来代替 `else if` 语句。 * 使用 `dir()` 函数可以获取对象支持的方法,例如 `dir(lst)`。 * 使用 `del` 语句可以删除 dict 中的某个 key,例如 `del dct['name']`。 本资源提供了 ...
在学生信息管理系统中,会用到变量声明、条件语句(if-elif-else)、循环(for和while)、函数定义(def)以及异常处理(try-except)等。 2. **数据结构**:Python提供了丰富的内置数据结构,如列表(list)、元组...
2. **控制结构**:包括条件语句(if-elif-else)和循环语句(for和while)。例如,你可以用这些结构来执行特定的代码块,当满足特定条件时,或者重复执行一段代码直到满足某个条件。 3. **函数**:Python中的函数是...
《Python Cookbook》是一本深入解析Python编程语言的权威指南,其英文版提供了丰富的代码示例和实践技巧,帮助读者更深刻地理解Python的核心概念和高级功能。本书通过一系列实用的编程“食谱”(recipes),涵盖了从...
4. **函数**:Python中的函数定义简单,支持默认参数、可变参数和关键字参数。 5. **模块**:通过import语句导入其他Python文件,实现代码复用。 其次,我们转向数据分析。Python在数据分析领域有强大的库支持,如...
了解如何正确地编写语句,如赋值语句、条件语句(if-else)、循环语句(for、while)以及函数定义等,是学习Python的第一步。 2. **数据类型**:Python支持多种数据类型,包括基本的整型(int)、浮点型(float)、...
- **4.1 高阶函数**:高阶函数是指可以接受函数作为参数或返回函数作为结果的函数。这种函数式编程风格可以极大地提高代码的灵活性。 - **4.1.1 map/reduce**:`map()`函数将传入的函数依次作用到序列的每个元素,...
3. **控制流**:Python支持条件语句(if-else)和循环结构(for、while),以及异常处理(try-except)。 4. **函数**:Python中的函数定义使用def关键字,支持默认参数、可变参数和关键字参数。此外,还有内置函数...
Python中的`simplejson`模块是Python标准库`json`的一个补充,主要在Python 2.6及更早版本中使用,因为那时Python的标准库还没有完全支持JSON。`simplejson`库提供了一个高效的JSON编码和解码接口,符合ECMAScript ...
下面是一些Python开发中的高级技巧,包括但不限于列表推导式、字典推导式、集合推导式、合并字典、复制列表、反转列表、变量交换、高级拆包、函数返回多个值、列表合并成字符串、链式比较、`yield from`、使用字典...
12. **条件表达式**:Python的三元运算符(条件表达式)允许你简洁地写一行代码实现if-else逻辑,如`value = x if condition else y`。 13. **with语句**:`with`语句用于管理资源,如文件、网络连接等,确保在使用...
3. **控制结构**:Python中的控制结构包括条件语句(if-else)和循环(for、while)。这些结构用于根据特定条件执行代码或重复执行某段代码,是编写逻辑的重要工具。 4. **函数**:函数是Python中的可重用代码块,...
4. **函数和模块**:Python3的函数可以接受默认参数、关键字参数、可变参数,以及*args和**kwargs,这些设计使得函数的调用更加灵活。Python3的模块系统允许将代码组织成多个文件,通过import语句实现代码的重用和...
3. **控制结构**: 控制结构是指导程序流程的重要部分,包括条件语句(if-elif-else)、循环(for、while)、以及异常处理(try-except-finally)。第五章的作业可能涉及编写基于特定条件执行不同代码段的程序,或者...