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])

 

posted @ 2018-10-22 19:04  msjaxuexi  阅读(167)  评论(0编辑  收藏  举报