1. 定义管理员类,管理员有属性(name,password),可以创建学校、创建课程、创建老师

  2. 定义老师类,老师有属性(name,password),可以添加课程、给学生打分,但发现学生没有购买课程时,不能打分,并给出提示

  3. 定义学生类,学生有属性(name,password),可以获取当前学校、选择学校、选择课程,但学校没有该课程时,需要提示,并且不能选择该课程

  4. 定义学校类,学校有属性(name,addr),可以添加课程

  5. 定义课程类,课程有属性(name),可以添加学生

    # 人类
    class Person(object):
    def __init__(self,name,password):
    self.name = name
    self.password = password # 管理员类,继承Person
    class Admin(Person):
    school_list = []
    def __init__(self,name,password):
    super().__init__(name,password) def create_school(self,school_name,school_addr):
    school = School(school_name,school_addr)
    Admin.school_list.append(school)
    print(f'{self.name} 创建了 {school.name}')
    return school def create_coures(self,course_name,course_prize):
    course = Course(course_name,course_prize)
    print(f'{self.name} 创建了 {course.name}课程')
    return course def create_teacher(self,teacher_name,teacher_passwd):
    teacher = Teacher(teacher_name,teacher_passwd)
    print(f'{self.name} 招聘 {teacher.name}为老师')
    return teacher # 教师类,继承Person
    class Teacher(Person):
    def __init__(self,name,password):
    super().__init__(name,password)
    self.courses = list() def add_course(self,course):
    self.courses.append(course)
    print(f'{self.name} 增加了 {course.name}') def scoring(self, student,course, grade):
    print("开始打分")
    if course in student.courses:
    print(f'{self.name} 老师给 {student.name} 的{course.name}打了 {grade}分')
    else:
    print(f'{self.name}老师发现 学生{student.name} 没有购买{course.name}课程') # 学生类,继承Person
    class Student(Person):
    def __init__(self,name,password):
    super().__init__(name,password)
    self.courses = list()
    self.school = '' def get_school_list(self,admin):
    for i in admin.school_list:
    print(f'当前学校有{i.name}') def choice_school(self,school):
    self.school = school
    print(f'{self.name} 选择了 {school.name}') def choice_course(self,course):
    if course.name in self.school.courses:
    self.courses.append(course)
    course.students.append(self.name)
    print(f'{self.name} 选择了 {course.name} 课程')
    else:
    print(f'{self.school.name} 没有 {course.name} 课程') # 学校类
    class School(object):
    def __init__(self,name,addr):
    self.name = name
    self.addr = addr
    self.courses = list()
    def add_course(self,course):
    course_name = course.name
    self.courses.append(course_name)
    print(f'{self.name} 学校 增加了 {course_name}课程') # 课程类
    class Course(object):
    def __init__(self,name,prize):
    self.name = name
    self.prize = prize
    self.students = list() def add_student(self,student):
    self.students.append(student)
    print(f'{student} 学了 {self.name}课程') # 管理员
    admin = Admin('冉宏元','123') # 管理员创建了school
    bj_school = admin.create_school('北京oldboy教育公司','北京')
    sz_school = admin.create_school('深圳oldboy教育公司','深圳')
    sh_school = admin.create_school('上海oldboy教育公司','上海')
    wh_school = admin.create_school('武汉oldboy教育公司','武汉') # 管理员创建了课程
    python = admin.create_coures('Python',21000)
    linux = admin.create_coures('Linux',18000)
    go = admin.create_coures('go',16000) # 学校增加课程
    '''北京'''
    bj_school.add_course(python)
    bj_school.add_course(linux)
    bj_school.add_course(go)
    '''上海'''
    sh_school.add_course(go)
    sh_school.add_course(python)
    '''武汉'''
    wh_school.add_course(linux)
    '''深圳'''
    sz_school.add_course(python)
    sz_school.add_course(go) # 管理员招聘老师
    nick = admin.create_teacher('nick','456')
    tank = admin.create_teacher('tank','789') # 学生
    one = Student('张三','123')
    one.get_school_list(admin)
    one.choice_school(sh_school)
    one.choice_course(linux)
    one.choice_course(python)
    one.choice_course(go) two = Student('李四','123')
    two.get_school_list(admin)
    two.choice_school(wh_school)
    two.choice_course(linux)
    two.choice_course(python)
    two.choice_course(go) # 老师给学生打分
    nick.scoring(one,linux,12) # 打印one学生的课程记录
    print("打印one学生的课程记录")
    for i in one.courses:
    print(i.name) print("打印two学生的课程记录")
    for i in two.courses:
    print(i.name) '''打印python课程学习的人'''
    for i in python.students:
    print(i)
    '''打印linux课程学习的人'''
    for i in linux.students:
    print(i)
    '''打印go课程学习的人'''
    for i in go.students:
    print(i)

python面向对象之练习题1的更多相关文章

  1. python面向对象之练习题2

    练习题 需求: 士兵 可以 花钱买一个AK47 士兵 可以 用开开火 士兵 可以 买弹夹 士兵 可以 上子弹 士兵 可以 给 枪 添加子弹 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火 枪 ...

  2. python 面向对象进阶之内置方法

    一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...

  3. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  4. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  5. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  7. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  8. Python面向对象详解

    Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是

  9. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

随机推荐

  1. java作业 11.10

    package text3; import java.io.File; import java.io.IOException; import java.nio.file.Files; public c ...

  2. 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。

    //编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...

  3. bootstrap与vue,react的区别

    链接(与Vue区别):https://www.php.cn/faq/423095.html 链接(BootStrap, React, Vue的比较):https://www.jianshu.com/p ...

  4. 吴裕雄--天生自然SSH框架开发:搭建一个完整的SSH框架

    下载jar包 spring框架的jar包:https://repo.spring.io/ hibernate框架的jar包:http://hibernate.org/orm/ struts2框架的ja ...

  5. 在Visual Studio 2017中,.NET(C#)通过Oracle.ManagedDataAccess来连接Oracle数据库

    C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜 ...

  6. 【原】Docker学习_Docker上传镜像至docker hub(4)

    构造镜像的两种方式:1.commit  2.Dockerfile Docker提供了一个docker commit命令,可以将容器的存储层保存下来成为镜像.换句话说,就是在原有镜像的基础上,再叠加上容 ...

  7. Postgresql查询表和表结构

    查询表名 SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' O ...

  8. 02-12Android学习进度报告十二

    今天学习了ListView的焦点问题,基本了解了ListView的使用内容. 首先可以为抢占了控件的组件设置:android:focusable="false" 只需为抢占了Lis ...

  9. c++ 查重+排序函数

    输入 第一行n.第二行有n个元素. 输出 查重排序后的元素 样例: 输入: 5 1 1 2 3 4 输出: 1 2 3 4 unique的作用是“去掉”容器中相邻元素的重复元素 注意:用unique只 ...

  10. 无法获得锁/var/lib/dpkg/lock - open(11.资源暂时不可用)

    E:无法获得锁/var/lib/dpkg/lock  - open(11.资源暂时不可用) E:无法锁定资源目录(/var/lib/dpkg)是否有其他进程正占用它? 解决方案: sudo rm /v ...