问:
【基础题】:请解释类方法、静态方法、属性方法
【提高题】:有以下几个数字:1、2、3、4、5,能组成多少个互不相同且无重复数字的三位数?都是多少?(代码实现)
答:
【基础题】:请解释类方法、静态方法、属性方法
1 @staticmethod 2 静态方法,通过类直接调用,不需要创建对象,不会隐式传递self 3 4 @classmethod 5 类方法,方法中的cls是类对象本身,调用方法时传的值也必须是类的公有属性,就是说类方法只能访问类本身的公有字段,不能访问实例变量 6 7 @property 8 属性方法:把一个方法变成一个静态属性。调用的时候不需要加()
1 静态方法:在类中的方法前面通过@staticmethod装饰器实现静态方法 2 类方法:在类中的方法前面通过@classmethod装饰器实现类方法,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量 3 属性方法:在类中的方法前面通过@property装饰器实现属性方法,即把一个方法变成一个静态属性
【提高题】:有以下几个数字:1、2、3、4、5,能组成多少个互不相同且无重复数字的三位数?都是多少?(代码实现)
方法1:
import itertools from functools import reduce lyst = [1, 2, 3, 4, 5] result = [] for el in itertools.permutations(lyst, 3): temp = reduce(lambda x,y:x * 10 +y, el) result.append(temp) print(f'总共有{len(result)}个互不相同且五重复数字的三位数,分别是:') print(result)
方法2:
import copy numbers = [1, 2, 3, 4, 5] tri = [] for i in numbers: d_u = copy.copy(numbers) d_u.remove(i) for j in d_u: u = copy.copy(d_u) u.remove(j) for k in u : tri.append(i * 100 + j * 10 + k) print(tri) print(len(tri))
方法3:
import itertools count = 0 for i in itertools. product([1,2,3,4,5], repeat=3): if i[0] != i[1] and i[0] != i[2] and i[1] != i[2]: print(i[0]*100 + i[1]*10 + i[2]) count += 1 print(count)
方法4:
firstNumber = [1, 2, 3, 4, 5] count = 0 for i in firstNumber: secondNumber = firstNumber[:] secondNumber.remove(i) for j in secondNumber: thirdNumber = secondNumber[:] thirdNumber.remove(j) for k in thirdNumber: print(str(i) + str(j) + str(k), end=",") count += 1 print("一共有{}个数".format(count))