题目要求:
根据业务需求,现要对慕课学院(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 {}
知识兔example.py 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)
知识兔file_exe.py相关知识点:
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)
知识兔字典的遍历类的魔法方法__init__中 未设置默认值的形参,在实例中必须添加实参
__str__ 一般返回字符串,打印实例直接显示
类的高级特性@property 方法作为实例的属性 可直接调用
模块的引用需注意:同一目录下应有__init__.py文件 引用包需在__init__.py文件中引用