day24作业
1.所有程序都因该使用面向对象来设计吗?为什么?
不是,面向对象只对有扩展性有要求的程序需要使用面向对象使用,如果程序不需要扩展,一般使用面向过程式编程。
2.什么是对象 什么是类
生活中对象就是一个能够确实存在的个体,类则是根据对象总结特点和行为的虚拟概念。
编程中类是属性和函数(行为)组成的定义,对象是依照类声明的实例。
3.在面向过程编程中我们思考解决方案时,是分析完成任务时需要哪些步骤,按照什么样的顺序来编写,而在面向对象编程中我们从操作者转变为指挥者 首先思考的是什么?
由什么的对象,那些对象来实现哪些功能,从而解决问题。
4.一个类中通常包含变量和函数,它们分别用于描述什么?
变量表示这个类对象公共的属性,函数则这类对象共有的行为或功能。
5.类在定义阶段发生了什么
只有包含该类的py被执行,就会做两件事情
1、就会创建的名称空间
2、执行代码,将产生额名称放入名称空间
6.创建对象时发生了什么
1.创建一个空对象
2。执行__init__函数,并且自动传入这个对象
7.什么是绑定方法,和普通函数有什么区别
绑定方法是只存在对象的方法,调用是必须通过对象才能调用,不同函数直接加()就可以调用。
8.根据需求编写程序,
学生成绩管理系统
1.根据姓名查看学生成绩
2.根据科目查看学生成绩
3.查看总平均分
4.根据姓名,和科目,查看成绩
5.根据姓名删除学生信息
先分析需要哪些对象:
学生对象
属性:姓名,年龄,语文成绩,数学成绩,英语成绩
行为:自我介绍(输出自己的姓名 年龄 成绩)
管理器对象:
属性:一堆学生(一个列表 里面装一堆学生对象 可以手动创建放进去)
行为:上述五个功能
class Student: def __init__(self,name,age,cs,ms,es): self.name = name self.age = age self.cs =cs self.ms = ms self.es =es def introduce_oneself(self): print('我的名字是 %s, 年龄 :%s,语文成绩:%s,数学成绩:%s,英文成绩:%s' %(self.name,self.age,self.cs,self.ms,self.es)) class AdminStu: def __init__(self,*args): self.students = list(args) def name_check_score(self,name): for stu in self.students: if stu.name == name: print('语文:%s, 数学:%s, 英语:%s'%(stu.cs,stu.ms,stu.es)) def subject_check_score(self,subject): for stu in self.students: print(stu.name,stu.__dict__[subject]) def check_total_score(self): cs_sum =0 ms_sum = 0 es_sum = 0 count = 0 for stu in self.students: count +=1 cs_sum += stu.cs ms_sum += stu.ms es_sum += stu.es print('语文的平均成绩:%s'%(cs_sum/count),\ '数学的平均成绩:%s'%(ms_sum/count),\ '英语的平均成绩:%s'%(es_sum/count)) def name_and_subject_check_score(self,name,subject): for stu in self.students: if stu.name == name: print(name,'成绩为:%s'%stu.__dict__[subject]) def del_stu(self,name): for stu in self.students: if stu.name == name: self.students.remove(stu) print('%s 已删除'%name) s1 = Student('s1',22,80,80,70) s2 = Student('s2',23,85,80,90) s3 = Student('s3',24,100,90,85) s1.introduce_oneself() as1 = AdminStu(s1,s2,s3) as1.name_check_score('s1') as1.subject_check_score('cs') as1.check_total_score() as1.name_and_subject_check_score('s2','es') as1.del_stu('s3') print([i.name for i in as1.students]) #结果: ''' 我的名字是 s1, 年龄 :22,语文成绩:80,数学成绩:80,英文成绩:70 语文:80, 数学:80, 英语:70 s1 80 s2 85 s3 100 语文的平均成绩:88.33333333333333 数学的平均成绩:83.33333333333333 英语的平均成绩:81.66666666666667 s2 成绩为:90 s3 已删除 ['s1', 's2'] '''
增强版
import json class Student: def __init__(self,name,age,cs,ms,es): self.name = name self.age = age self.cs =cs self.ms = ms self.es =es def introduce_oneself(self): print('我的名字是 %s, 年龄 :%s,语文成绩:%s,数学成绩:%s,英文成绩:%s' %(self.name,self.age,self.cs,self.ms,self.es)) class AdminStu: def __init__(self): ''' 改为从json文件中读取字典,有字典生成student对象,保存到students列表 ''' self.students = [] f = open(r'student.json','r',encoding='utf-8') res = json.load(f) f.close() for i in res: self.students.append(Student(i["name"],i["age"],i["cs"],i["ms"],i["es"])) def name_check_score(self,name): for stu in self.students: if stu.name == name: print('语文:%s, 数学:%s, 英语:%s'%(stu.cs,stu.ms,stu.es)) def subject_check_score(self,subject): for stu in self.students: print(stu.name,stu.__dict__[subject]) def check_total_score(self): cs_sum =0 ms_sum = 0 es_sum = 0 count = 0 for stu in self.students: count +=1 cs_sum += stu.cs ms_sum += stu.ms es_sum += stu.es print('语文的平均成绩:%s'%(cs_sum/count),\ '数学的平均成绩:%s'%(ms_sum/count),\ '英语的平均成绩:%s'%(es_sum/count)) def name_and_subject_check_score(self,name,subject): for stu in self.students: if stu.name == name: print(name,'成绩为:%s'%stu.__dict__[subject]) def save_to_json(self): """ 依照 self.students 生成字典保存到json文件中 :return: """ stu_list = [] for stu in self.students: stu_list.append({"name":stu.name,"age":stu.age,"cs":stu.cs,"ms":stu.ms,"es":stu.es}) f= open(r'student.json','w') json.dump(stu_list,f) f.close() def del_stu(self,name): ''' 根据名字删除student对象 :param name: :return: ''' for stu in self.students: if stu.name == name: self.students.remove(stu) print('%s 已删除'%name) self.save_to_json() def add_student(self,student): ''' 将学生对象传入self.student,并保存到json文件 :param student: :return: ''' for stu in self.students: if stu.name == student.name: print('学生已经存在') return self.students.append(student) self.save_to_json() def modify_student(self,name,option,value): ''' 修改并保存 :param name: :param option: :param value: :return: ''' for stu in self.students: if stu.name == name: stu.__dict__[option] = value self.save_to_json() s4 = Student('s4',22,80,80,70) s5 = Student('s5',23,85,80,90) s6 = Student('s6',24,100,90,85) s5.introduce_oneself() admin1 = AdminStu() admin1.add_student(s4) admin1.add_student(s5) admin1.add_student(s6) admin1.name_check_score('s4') admin1.modify_student('s5','es',100) admin1.name_check_score('s6') admin1.del_stu('s4') print([i.name for i in admin1.students])