题目要求:
根据业务需求,现要对慕课学院(1)班的所有学员进行选修课程分配,使得每一名学生都可以选修到一门课程。具体要求如下:
1、自定义学生信息、课程信息、教师信息三者的具体描述
2、自定义example.py和file_exe.py模块,分别用以定义(1)中的描述信息和作为启动文件
3、启动文件中主要包含5个方法,包括星号(“*”)分割线设置、初始化课程信息并装载入列表返回、初始化教师信息并装载入列表返回、遍历课程对象并绑定教师至课程对象的对应属性并装载入列表返回、初始化学生信息并装载入列表返回
4、启动文件中利用‘__main__’魔法属性实现(3)中定义方法的调用,并遍历所返回的学生对象列表以添加课程至学生对象的属性
需求分析:
1.实现学生信息,教师信息,课程信息初始化 ( 用列表存储各个实例)
2.实现教师信息与课程信息绑定 (用字典存储信息,语义明确,结构化数据)
3.实现学生与教师信息课程信息的绑定(将课程名称存储到实例对象的课程属性中,并以属性的方式查看property)
思路:
1.模块化思想:分为两个模块:启动模块与类模块
2.面向对象思想:教师 , 课程 ,学生3个对象分别添加属性
学生类需要绑定课程添加add方法赋值给course属性
课程类需要绑定教师,创建binding方法赋值非teacher属性
1 """ 2 1、自定义学生信息、课程信息、教师信息三者的具体描述 3 4 2、自定义example.py和file_exe.py模块,分别用以定义(1)中的描述信息和作为启动文件 5 6 3、启动文件中主要包含5个方法,包括星号(“*”)分割线设置、初始化课程信息并装载入列表返回、初始化教师信息并装载入列表返回、遍历课程对象并绑定教师至课程对象的对应属性并装载入列表返回、初始化学生信息并装载入列表返回 7 8 4、启动文件中利用‘__main__’魔法属性实现(3)中定义方法的调用,并遍历所返回的学生对象列表以添加课程至学生对象的属性。 9 """ 10 #学生类 11 class Student(object): 12 def __init__(self , s_number , name , s_course = []): 13 self.s_number = s_number 14 self.name = name 15 self.s_course = s_course 16 17 @property 18 def course_detail(self): 19 return self.s_course 20 21 def add_course(self , cour_info): 22 self.s_course.append(cour_info) 23 24 def __str__(self): 25 return "name:{0} , s_number:{1}".format(self.name , self.s_number) 26 27 28 #教师类 29 class Teacher(object): 30 def __init__(self , t_number , name , t_telnumber): 31 self.t_number = t_number 32 self.name = name 33 self.t_telnumber = t_telnumber 34 35 #返回教师编号及教师姓名 36 def __str__(self): 37 return "{0},{1}".format(self.t_number , self.name) 38 39 40 #课程类 41 class Course(object): 42 def __init__(self , c_number , name , teacher = None): 43 self.c_number = c_number 44 self.name = name 45 self.teacher = teacher 46 47 def binding(self , teacher): 48 if isinstance(teacher , Teacher): 49 self.teacher = teacher 50 c_dict = {} 51 c_dict.update(课程名称 = self.name , 教师名称 = self.teacher.name) 52 return c_dict 53 else: 54 return {}
1 """ 2 1、自定义学生信息、课程信息、教师信息三者的具体描述 3 4 2、自定义example.py和file_exe.py模块,分别用以定义(1)中的描述信息和作为启动文件 5 6 3、启动文件中主要包含5个方法,包括星号(“*”)分割线设置、初始化课程信息并装载入列表返回、初始化教师信息并装载入列表返回、遍历课程对象并绑定教师至课程对象的对应属性并装载入列表返回、初始化学生信息并装载入列表返回 7 8 4、启动文件中利用‘__main__’魔法属性实现(3)中定义方法的调用,并遍历所返回的学生对象列表以添加课程至学生对象的属性。 9 """ 10 from mooc_chapter3_project.example import Course as example_Course 11 from mooc_chapter3_project.example import Teacher as example_Teacher 12 from mooc_chapter3_project.example import Student as example_Student 13 #接收标题名字并格式化输出 14 def introduction(str): 15 # 字符串拼接 16 print("*"*10 +"{0}".format(str) +"*"*10) 17 18 #课程信息初始化 19 def prepare_course(): 20 """ 21 :return:返回课程信息列表,元素为实例对象 22 """ 23 course_dict = { "01" : "网络爬虫" , "02" : "数据分析" , 24 "03" : "人工智能" , "04" : "机器学习" , 25 "05" : "云计算" , "06" : "大数据", 26 "07" : "图像识别" , "08" : "web开发" 27 } 28 course_list = [] 29 for k,v in course_dict.items(): 30 course = example_Course(k, v) 31 course_list.append(course) 32 return course_list 33 34 #教师信息初始化 35 def create_teacher(): 36 """ 37 :return:返回教室信息列表 元素为实例对象 38 """ 39 t1 = example_Teacher("T1", "张亮", "13301122001") 40 t2 = example_Teacher("T2", "王朋", "13301122002") 41 t3 = example_Teacher("T3", "李旭", "13301122003") 42 t4 = example_Teacher("T4", "黄国发", "13301122004") 43 t5 = example_Teacher("T5", "周勤", "13301122005") 44 t6 = example_Teacher("T6", "谢富顺", "13301122006") 45 t7 = example_Teacher("T7", "贾教师", "13301122007") 46 t8 = example_Teacher("T8", "杨教师", "13301122008") 47 teacher_list = [t1, t2, t3, t4, t5, t6, t7, t8] 48 return teacher_list 49 50 #课程绑定教师 51 def course_to_teacher(): 52 """ 53 :return: 返回课程信息列表, 元素为字典 54 """ 55 # (1)创建空列表 56 ct_list = [] 57 ls_course = prepare_course() 58 ls_teacher = create_teacher() 59 for i in range(len(ls_course)): 60 j = -(i + 1) 61 ct = ls_course[i].binding(ls_teacher[j]) 62 ct_list.append(ct) 63 return ct_list 64 65 #学生信息初始化 66 def create_student(): 67 """ 68 :return: 学生信息列表 69 """ 70 ls_student = ["小亮" , "小明" , "李红" , "小丽" , "Jone" , "小彤" , "小K" , "慕慕"] 71 s_number_list = [] 72 for i in range(1000 , 1008): 73 s_number_list.append(i) 74 s_numAndname_list = [] 75 for i in range(len(ls_student)): 76 j = -(i + 1) 77 s = example_Student(s_number_list[i] , ls_student[j]) 78 s_numAndname_list.append(s) 79 return s_numAndname_list 80 81 if __name__ == "__main__": 82 TeacAndCour_info = course_to_teacher() 83 Stu_info = create_student() 84 introduction("慕课学院(1)班学生信息") 85 for i in range(len(Stu_info)): 86 print(Stu_info[i]) 87 introduction("慕课学院(1)班选课结果") 88 for j in range(len(TeacAndCour_info)): 89 #绑定每位学生的课程信息 90 Stu_info[j].add_course(TeacAndCour_info[j].get("课程名称")) 91 #以属性方式查看 92 # print(Stu_info[j].course_detail) 93 print("Name:{0} , Selected:[{1}]".format(Stu_info[j].name , TeacAndCour_info[j])) 94 #打印教师信息 95 # t = create_teacher() 96 # print(t[0].t_telnumber , t[0].name , t[0].t_number)
相关知识点:
1 p_dict = {"key" : "value"} 2 p_dict2 = dict(key = "value")
1 p_dict = {"name" : "小明" , "sex" : "男" , "age" : "19"} 2 name = p_dict["name"] 3 name2 = p_dict.get("name")
1 course_dict = { "01" : "网络爬虫" , "02" : "数据分析" , 2 "03" : "人工智能" , "04" : "机器学习" , 3 "05" : "云计算" , "06" : "大数据", 4 "07" : "图像识别" , "08" : "web开发" 5 } 6 for k,v in course_dict.items(): 7 print(k) 8 print(v)
1 from mooc_chapter3_project.example import Course as example_Course
1 p_list = [] 2 p_list.append(1)
1 p_dict = {} 2 p_dict.update(姓名 = "小明" , 年龄 = "19" , 性别 = "男")
1 print(isinstance("a" , int))
类的魔法方法__init__中 未设置默认值的形参,在实例中必须添加实参
__str__ 一般返回字符串,打印实例直接显示
类的高级特性@property 方法作为实例的属性 可直接调用
模块的引用需注意:同一目录下应有__init__.py文件 引用包需在__init__.py文件中引用