题目要求:

根据业务需求,现要对慕课学院(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 = {"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))
isinstance方法辨别实例

类的魔法方法__init__中 未设置默认值的形参,在实例中必须添加实参

      __str__     一般返回字符串,打印实例直接显示

类的高级特性@property 方法作为实例的属性 可直接调用

模块的引用需注意:同一目录下应有__init__.py文件 引用包需在__init__.py文件中引用

02-10 11:37