智能体测开Day23

智能体测开Day23 推导式# 推导式 列表字典集合推导式生成器 [表达式 for 变量 in 序列集 .... if 条件] {表达式 for 变量 in 序列集 .... if 条件} 字典推导式{键表达式:值表达式 for key,value in 序列集.items() if。。。} students {tom: 90, jack: 50, tony: 60, red: 70} # 查找成绩及格的 dict1 {k:v for k,v in students.items() if v60} print(dict1) # 查找成绩及格的并且将及格成绩2,姓名拼接-- dict2 {k--:v2 for k,v in students.items() if v60} print(dict2) # 查找成绩及格的成绩如果是90分以上每个成家3分 dict3 {k:v3 if v90 else v for k,v in students.items() if v60} print(dict3) 生成器适合于大量的数据处理 (表达式 for 变量 in 序列集 .... if 条件) # 生成1-100以内的含有3的所有数据 s ( i for i in range(1,101) if 3 in str(i)) print(type(s)) # class generator print(s) for a in s: print(a,end,) print() # 获取1-100以内的数将他们的平方存储到列表中 s ( i**2 for i in range(1,101)) l [b for b in s] print(l)异常处理# 异常处理 为了保证代码能正常运行将python中碰到的可能出现问题的代码进行处理处理完之后不管代码是否运行有问题整体代码都还能继续运行 不同的问题叫异常不同的异常进行不同的处理 # print(1/0) # ZeroDivisionError: division by zero # print(l[3]) # IndexError: list index out of range int(a)# ValueError: invalid literal for int() with base 10: a 异常处理 try: 可能出现异常的代码 expect 异常类型1 as 变量: 异常处理1 expect 异常类型2: 异常处理2 ... else: 如果没有出现异常 finally: 最终一定要执行的代码 无论代码会不会出现问题程序能不能正常运行都要执行改代码 面试问题 1如果代码出现问题怎么处理 2try expect else finally哪些是必须写的哪些是可有可无的 try: num input() print(1/int(num)) # ZeroDivisionError: division by zero num1 input() print(int(num1)) ls[] print(ls[int(num)]) e 9 except ZeroDivisionError as e: print(输入0了不能被0除,e) except ValueError as e: print(f{num1}不能转变为整数) # except Exception: #Exception是所有异常的父类 # print(出错啦) else: print(没有出现异常) finally: print(最终一定要执行的代码:) print(--------------)面向对象# 面向对象 面向对象是一种编程思路该编程思路更容易被人理解针对于c语言的面向过程来说的。 c语言一个大问题分解成若干的小问题每个小问题用函数、语句实现。 案例洗衣服 自己洗拿盆 倒水倒洗衣粉 泡 搓 是个很详细的过程注重细节 洗衣机洗放衣服放洗衣粉 隐藏细节重点是找到能解决该问题的对象 对象的关注点是能实现该功能的单个独立实体项目是由很多独立实体拼接而成的 对象 面向对象编程的重点是对象学会抽离出对象对对象进行分析由两点出发对象的特征和行为 对象的特征静态的描述 属性 对象的行为动态的描述 方法 张雪职业制造工程师 年龄40 制造摩托车 杯子所属人老师 容量 200ml 盛水 类 是具备相同特征和行为的一系列的对象的统称是个抽象的存在一个类中有很多具体的实体对象对象其实是类的具体实体。 在代码中类相当于是一个模板对象是按照这个模板填写了具体的数据 面向对象编程 类--》创建对象--》对象去使用类中定义的方法 # 定义类 class Courier: company 顺丰 # 类属性 # 方法 def song(self): print(送快递) def qu(self,n): print(f取快递,取的件数{n}) # 创建对象1 新建对象 实例化对象 xiaoming Courier() xiaoming.song() # 通过对象名调用函数 xiaoming.qu(3) print(xiaoming.company) # 调用属性 顺丰 xiaoming.company 申通 print(xiaoming.company) # 申通 print(Courier.company) # 顺丰 # 创建对象2 xiaohua Courier() xiaohua.qu(4) print(xiaohua.company) # 顺丰 xiaoming.name tom print(xiaoming.name)属性# 属性 属性类属性实例属性 类属性直接定义在类中整个类都可以使用改属性所有对象共享的数据类名直接访问,对象也能访问 实例属性定义在__init__() 方法中的 1__init__() 方法是python提供的内部方法魔术方法 2在创建对象时自动调用 3方法的作用是初始化对象设置属性是初始化对象的其中一个内容 self:是个对象代表当前对象 # 定义类 class Courier: company 顺丰 # 类属性 # init方法 def __init__(self,name1,id): self.namename1 # 设置了实例属性 self后面的变量是属性名 后面的是参数名 self.id id # 方法 def song(self): print(f{Courier.company}公司姓名为{self.name}送的快递) def qu(self,n): print(f取快递,取的件数{n}) # 创建对象1 新建对象 实例化对象 xiaoming Courier(小明,1001) print(xiaoming.company) Courier.company 申通 # 修改了共享类型属性数据所有对象都改了 print(xiaoming.company) xiaoming.song() # 创建对象2 xiaohua Courier(小花,1002) print(xiaohua.company) xiaohua.song()方法# 方法 普通方法第一个参数self 对象名直接调用 类方法和静态方法可以通过类名直接调用也可以通过对象名调用 类方法第一个参数cls在对应的方法上加装饰器classmethod cls,代表对象 cls调用类属性 静态方法:在对应的方法上加装饰器staticmethod 考点 1类方法和静态方法的区别 2你都使用过哪些装饰器 class Human: type 人类 def __init__(self,name,age): self.name name self.ageage def drink(self): print(f{self.name}喝) classmethod def add(cls,n,m): # 可以在类方法中使用类属性 print(f类方法:{cls.type}) return nm staticmethod def jian(n,m): print(静态方法) return n-m shanding Human(小明,50) shanding.drink() # 类名调用类方法和静态方法 print(Human.add(3, 4)) Human.jian(3,4) # 对象名也可以调用 shanding.add(3,4) shanding.jian(3,4) print(-----------------------) Human.add(8,9)课后作业# 给定一个字符串列表返回一个字典 # 键为单词值为单词长度仅保留长度 3 的单词。 l [zhangzei,hello,abc,python,zz,we] dict1 {k:len(k) for k in l if len(k)3} print(dict1) # 给定两个等长列表第一个作为 key第二个作为 value # 只保留 value 为偶数的项。 # eg: keys [a, b, c, d] # values [1, 2, 3, 4] # 结果为{”b“:2,c:4} keys [a, b, c, d] values [1, 2, 3, 4] dict2 {keys[i]:values[i] for i in range(0,len(values)) if values[i]%2 0} print(dict2)# 创建一个BankAccount类要求 # 有类属性bank_name银行名称 # 有实例属性account_name账户名和balance余额 # 有方法deposit(amount)存款和withdraw(amount)取款 # 有方法display()显示账户信息 # 修改上面的BankAccount类将实例属性私有化并提供相应的getter和setter方法在setter方法中加入验证逻辑余额不能为负数。 # 为BankAccount类添加一个类方法change_bank_name(new_name)用于修改银行名称和一个静态方法calculate_interest(principal, rate, time)用于计算利息(金额利率时间)。 class BankAccount: bank_name 中国工商银行 #类属性 def __init__(self,a_name,bl): # 私有化实例属性加双下划线 self.__account_name a_name # 设置了实例属性 self后面的变量是属性名 后面的是参数名 self.__balance bl # ---------------------- getter setter 封装校验 ---------------------- # account_name 获取器 def get_account_name(self): return self.__account_name # account_name 设置器 def set_account_name(self, new_name): if len(new_name) 0: self.__account_name new_name else: print(账户名称不能为空) # balance 获取器 def get_balance(self): return self.__balance # balance 设置器校验余额不能为负数 def set_balance(self, new_balance): if new_balance 0: self.__balance new_balance else: print(余额不能为负数) # 存款 def deposit(self, amount): self.set_balance(self.get_balance() amount) print(f成功存入{amount}元) # 取款 def withdraw(self, amount): if self.get_balance() amount: self.set_balance(self.get_balance() - amount) print(f成功取出{amount}元) else: print(取款失败余额不足) # 展示账户信息 def display(self): print(f银行{BankAccount.bank_name}账户名{self.get_account_name()}账户余额{self.get_balance()}元) # 类方法修改银行名称 classmethod def change_bank_name(cls, new_name): cls.bank_name new_name print(f银行名称已修改为{cls.bank_name}) # 静态方法计算利息 利息本金*利率*时间 staticmethod def calculate_interest(principal, rate, time): if principal 0 and 0 rate 1 and time 0: return principal * rate * time else: print(参数非法本金、时间大于0利率0~1之间) return 0 # 创建对象1 acc1 BankAccount(张三, 1000) acc1.display() # 存款 acc1.deposit(500) # 取款 acc1.withdraw(300) acc1.display() # setter修改账户名 acc1.set_account_name(张泽) # 设置负余额 acc1.set_balance(-500) acc1.display() # 类方法修改银行名 BankAccount.change_bank_name(中国招商银行) acc1.display() # 静态方法计算利息 interest BankAccount.calculate_interest(10000, 0.02, 3) print(f总利息{interest}元)