题目要求:
根据业务需求,现要对慕课学院(1)班的所有学员进行选修课程分配,使得每一名学生都可以选修到一门课程。具体要求如下:
1、自定义学生信息、课程信息、教师信息三者的具体描述
2、自定义example.py和file_exe.py模块,分别用以定义(1)中的描述信息和作为启动文件
3、启动文件中主要包含5个方法,包括星号(“*”)分割线设置、初始化课程信息并装载入列表返回、初始化教师信息并装载入列表返回、遍历课程对象并绑定教师至课程对象的对应属性并装载入列表返回、初始化学生信息并装载入列表返回
4、启动文件中利用‘__main__’魔法属性实现(3)中定义方法的调用,并遍历所返回的学生对象列表以添加课程至学生对象的属性。
运行效果图:
example.py
class Student(object):
"""学生类"""
def __init__(self,s_num,s_name):
"""
:param s_num: 学号
:param s_name: 学生姓名
:param s_course: 已选课程,默认列表为空
"""
self.s_num = s_num
self.s_name = s_name
self.s_course = []
@property
def course_detail(self):
"""以属性的方法返回学生的已选课程信息"""
return self.s_course
def add_course(self,cour_info):
"""实现添加课程信息至学生对象的已选课程属性"""
self.s_course.append(cour_info)
def __str__(self):
"""设置学生类信息的字符串显示方法"""
return "name:{0},s_number:{1}".format(self.s_name,self.s_num)
class Teacher(object):
"""教师类"""
def __init__(self, t_num, t_name, t_phone):
"""
:param t_num: 教师编号
:param t_name: 教师姓名
:param t_phone: 手机号
"""
self.t_num = t_num
self.t_name = t_name
self.t_phone = t_phone
def __str__(self):
"""设置教师类信息的字符串显示方法"""
return 't_number:{0},t_name:{1}'.format(self.t_num, self.t_name)
class Course(object):
def __init__(self,c_num,c_name,c_teacher = None):
"""
:param c_num: 课程编号
:param c_name: 课程名城
:param c_teacher: 授课教师,默认为None
"""
self.c_num = c_num
self.c_name = c_name
self.c_techer = c_teacher
def binding(self,teacher):
"""绑定授课教师"""
#如果实例不存在,返回0,反之,将该实例赋值给课程类的授课教师属性,并将课程名和教师名包装成字典进行返回
if teacher == "":
return 0
else:
self.c_techer = teacher
return {"课程名称":self.c_name,"教师名称":self.c_techer.t_name}
file_exe.py
from example import Student,Teacher,Course
def introduction(str):
"""标题 函数"""
a = '*' * 22
print('{0}{1}{2}'.format(a,str,a))
def prepare_course():
"""创建课程信息初始化"""
# 1.创建字典接受课程信息
dict1 = {
"01": "网络爬虫", "02": "数据分析",
"03": "人工智能", "04": "机器学习",
"05": "云计算", "06": "大数据",
"07": "图像识别", "08": "Web开发"
}
#2.船舰空列表
list1 = []
#3.循环遍历字典,将字典的键值对传入到课程的实例,列表则每次追加每次的课程类实例
for k,v in dict1.items():
rest = Course(k,v)
list1.append(rest)
#4.返回追加后的列表
return list1
def create_teacher():
"""创建教师信息初始化"""
#1.列表保存教师信息
list_t = ["T1", "张亮", "13301122001"],["T2", "王朋", "13301122002"],\
["T3", "李旭", "13301122003"],["T4", "黄国发", "13301122004"],\
["T5", "周勤", "13301122005"],["T6", "谢富顺", "13301122006"], \
["T7", "贾教师", "13301122007"],["T8", "杨教师", "13301122008"]
#2。创建列表进行存储
list2 = []
#3.将8个教师信息一一传入教师类
for i in list_t:
rest = Teacher(i[0],i[1],i[2])
list2.append(rest)
#4.返回实例对象
return list2
def course_to_teacher():
"""课程与教师逐一绑定,每一课程信息绑定倒序的每一个老师信息"""
list3 = []
ls_course = prepare_course()
ls_teacher = create_teacher()
for i in range(0,len(ls_course)):
rest = ls_course[i].binding(ls_teacher[-(i+1)])
list3.append(rest)
return list3
def create_student():
"""创建学生信息初始化"""
#1.列表保存学生信息,并以变量保存
ls_student = ["小亮","小明","李红","小丽","Jone","小彤","小K","慕慕"]
#2.学号列表
ls_s_num = list(range(1000,1008))
#3.创建空列表
list4 = []
#4.循环遍历学生信息长度,将学号与倒序的学生姓名传入到学生类的实例,列表则追加每次学生类的实例
for i in range(0,len(ls_student)):
rest = Student(ls_s_num[i],ls_student[-(i+1)])
list4.append(rest)
return list4
if __name__ == "__main__":
rest1 = course_to_teacher()
rest2 = create_student()
introduction("慕课学院(1)班学生信息")
for i in rest2:
print(i)
introduction("慕课学院(1)班选课结果")
#调用学生类中的函数添加课程
for i in range(0,len(rest1)):
rest2[i].add_course(rest1[i])
for j in rest2:
print("Name:{0},Selected:{1}".format(j.s_name,j.course_detail))
运行结果: