python面向对象之练习题1
定义管理员类,管理员有属性(name,password),可以创建学校、创建课程、创建老师
定义老师类,老师有属性(name,password),可以添加课程、给学生打分,但发现学生没有购买课程时,不能打分,并给出提示
定义学生类,学生有属性(name,password),可以获取当前学校、选择学校、选择课程,但学校没有该课程时,需要提示,并且不能选择该课程
定义学校类,学校有属性(name,addr),可以添加课程
定义课程类,课程有属性(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的更多相关文章
- python面向对象之练习题2
练习题 需求: 士兵 可以 花钱买一个AK47 士兵 可以 用开开火 士兵 可以 买弹夹 士兵 可以 上子弹 士兵 可以 给 枪 添加子弹 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火 枪 ...
- python 面向对象进阶之内置方法
一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- java 对图片的添加文字描述,以及两张图片合成一张
最近公司一个需要,需要把商品的优惠卷分享链接,生成一个二维码然后和商品主图合成一张,并且在新合成的主图增加商品信息的描述,好了直接看合成后图片的样式 下面我就直接贴代码,首先是Contorller层 ...
- 传奇脚本:#AutoRun NPC SEC 参数说明
传奇脚本:#AutoRun NPC SEC 参数说明 SEC:按秒运行MIN:按分运行HOUR:按小时运行DAY:按天运行RunOnDay:按每天什么时候运行RUNONWEEK:按星期几及时间运行机器 ...
- ASP.NET Core搭建多层网站架构【1-项目结构分层建立】
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[1-项目结构分层建立] 文章目录 此分支项目代码 ...
- 爬虫(十三):PIL模块
1. PIL模块 在爬虫(十二):图形验证码的识别.滑动验证码的识别(B站滑动验证码)中我留下了一个悬念,为什么安装的是pillow模块,而不是PIL模块.这是因为PIL是python2的产物,它并没 ...
- JavaSE复习~开发环境的搭建 与 HelloWorld
JDK的下载 访问Oracle官网,下载jdk,目前来说用的最多的是 8 版本 https://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 【代码审计】VAuditDemo SQL注入漏洞
这里我们定位 sqlwaf函数 在sys/lib.php中,过滤了很多关键字,但是42 43 44行可以替换为空 比如我们可以 uni||on来绕过过滤
- zk的单机部署,与客户端的使用
下载zk wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz 安装jdk t ...
- express session 实现登录
https://www.cnblogs.com/mingjiatang/p/7495321.html Express + Session 实现登录验证 1. 写在前面 当我们登录了一个网站,在没有 ...
- JPA 级联保存的问题
前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...
- Centos7618安装后常见操作
1.查看ip ip address 或者ip add 2.查看发行版本 yum -y install redhat-lsb lsb_release -a 3.查看内核版本 uname -r cat ...