• 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])
  • 相关阅读:
    mac电脑 显示隐藏文件 取消显示隐藏文件
    xcode 无法下载 ios 8.3 simulator 提示权限不够
    socket 通讯 端口绑定 问题 解答
    description方法 oc 就是NSLog使用
    init 和 initialize 差距在哪里 oc
    类本质的是? 类的加载过程?
    分类和继承的区别 oc
    Masonry的简单使用
    cocopods
    swift UITextField
  • 原文地址:https://www.cnblogs.com/msj513/p/9832016.html
Copyright © 2020-2023  润新知