你好,我在写course_to_teacher 卡住了 需要帮助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #example文件 class Student( object ): """能够描述学生的学号、姓名、已选课程(默认值为空列表)三项信息""" def __init__( self , stu_num, name, course): """ 能够描述学生的学号、姓名、已选课程(默认值为空列表)三项信息 :param stu_num: 整型 学号 :param name: 字符串 姓名 :param course: 列表 已选课程 """ self .stu_num = stu_num self .name = name self .course = course @ property def course_detail( self ): """以属性的方式返回学生的已选课程信息""" return self .course def add_course( self , cour_info): """ 实现添加课程信息(cour_info)至学生对象的已选课程属性 :param cour_info: 添加课程的属性 :return: 添加课程的已选课程 """ self .course.append(cour_info) def __str__( self ): """返回如效果图所示学生信息表的学生姓名,学生学号""" return "name:{0}, s_number:{1}" . format ( self .name, self .stu_num) class Teacher( object ): """描述教师编号、教师姓名、手机号码三项信息""" def __init__( self , teacher_num, name, phone): """ 描述教师编号、教师姓名、手机号码三项信息 :param teacher_num: 字符串 教师编号 :param name: 字符串 教师名称 :param phone: 整型 手机号码 """ self .teacher_num = teacher_num self .name = name self .phone = phone def __str__( self ): """返回教师编号与教师姓名属性""" print ( "tea_num:{0}, tea_name:{1}" . format ( self .teacher_num, self .name)) class Course( object ): """描述课程编号、课程名称、授课教师(teacher默认值为None)""" def __init__( self , cour_num, cour_name, cour_teacher = None ): """ 描述课程编号、课程名称、授课教师(teacher默认值为None) :param cour_num: 整型 课程编号 :param cour_name: 字符串 课程名称 # :param cour_teacher: 字符串 授课教师 """ self .cour_num = cour_num self .cour_name = cour_name self .cour_teacher = cour_teacher # @property def binding( self , teacher): """ 实现课程绑定授课教师功能,这里的teacher传入的是教师类的实例,在file_exe.py中会体现到 :param teacher: 列表 教师编号、名称、手机号码 :return: 如果存在,将该实例赋值给课程类的授课教师属性,并将课程名称和教师名称包装成字典进行返回;如果不存在教师类的实例,返回空 """ if teacher is not None : self .cour_teacher = teacher cour_dict = { '课程名称' : self .cour_name, '教师名称' : self .cour_teacher} return cour_dict else : return None |
下面一个是file_exe文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | from example import Student, Course, Teacher # import example """从example.py文件中导入学生类,教师类,课程类""" def introduction(title_str): """ 标题介绍 :param title_str: 字符串 接收标题名字 :return: 标题的样式 """ asterisk = "************" return "{0}{1}{0}" . format (asterisk, title_str) def prepare_course(): """ 创建课程信息初始化 :return: 返回追加的列表 """ course_detail = { "01" : "网络爬虫" , "02" : "数据分析" , "03" : "人工智能" , "04" : "机器学习" , "05" : "云计算" , "06" : "大数据" , "07" : "图像识别" , "08" : "Web开发" } course_list = [] for num, name in course_detail.items(): # print(num + "...." + name) course = Course(num, name) course_list.append(course) return course_list def create_teacher(): """创建教师信息初始化,并以列表形式返回所创建的8名教师对象""" teacher_list = [] teacher_detail = [ [ "T1" , "张亮" , "13301122001" ], [ "T2" , "王朋" , "13301122002" ], [ "T3" , "李旭" , "13301122003" ], [ "T4" , "黄国发" , "13301122004" ], [ "T5" , "周勤" , "13301122005" ], [ "T6" , "谢富顺" , "13301122006" ], [ "T7" , "贾教师" , "13301122007" ], [ "T8" , "杨教师" , "13301122008" ] ] for i in teacher_detail: real_teacher = Teacher(i[ 0 ], i[ 1 ], i[ 2 ]) teacher_list.append(real_teacher) return teacher_list # print(real_teacher) # s = prepare_course() # print(s[0].binding(teacher_detail[0][1])) def course_to_teacher(): """现课程与教师逐一绑定(每一课程信息绑定倒叙的每一老师信息),并以列表形式返回所课程与教师的绑定结果""" course_to_teacher_list = [] ls_course = prepare_course() ls_teacher = create_teacher() # print(ls_course) for i in range ( 0 , len (ls_course)): # course_to_teacher_list.append(ls_course[i].binding(ls_teacher[- (i + 1)])) # print(ls_teacher[-(i + 1)]) print (ls_course[i].binding(ls_teacher[ - (i + 1 )])) # print(ls_teacher[- (i + 1)]) def create_student(): """建学生信息初始化,并以列表形式返回所创建的8名学生对象""" ls_student = [] student_name = [ "小亮" , "小明" , "李红" , "小丽" , "Jone" , "小彤" , "小K" , "慕慕" ] student_no = list ( range ( 1000 , 1007 + 1 )) for i in range ( len (student_name)): # print('学号:{0}, 姓名:{1}'.format(student_no[i], student_name[-1 - i])) student = Student(student_no[i], student_name[ - 1 - i]) ls_student.append(student) # print(ls_student) return ls_student |
41
收起
正在回答 回答被采纳积分+1
4回答
qq_默默不语_0
2020-02-22 14:42:01
example.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #!/usr/local/bin/python3.7 # @Time : 2020/2/22 11:36 上午 # @Author : Jason # @File : example.py # @Software: PyCharm class Student( object ): """学生类""" def __init__( self , stu_num, name, class_info = None ): """ 初始化学生类的基本信息 :param stu_num: 学生编号 :param name: 学生名称 :param class_info: 课程信息 """ if class_info is None : class_info = [] self .stu_num = stu_num self .name = name self .class_info = class_info # 1.设定course_detail方法以属性的方式返回学生的已选课程信息 def course_detail( self , class_info): """ 返回学生的已选课程信息 :param class_info: 已选课程信息 :return: [] """ return self .class_info # 2.设定add_course(self,cour_info)方法,实现添加课程信息 def add_course( self , cour_info): """ 添加课程信息 :param cour_info: 课程信息 :return: """ self .class_info.append(cour_info) def __str__( self ): return 'name:{},s_number:{}' . format ( self .name, self .stu_num) class Teacher( object ): """教师类""" def __init__( self , tea_num, name, tel_num): """ 初始化教师类的基本信息 :param tea_num: 教师编号 :param name: 教师名称 :param tel_num: 教师的电话 """ self .tea_num = tea_num self .name = name self .tel_num = tel_num def __str__( self ): return 'teacher_number:{},teacher_name:{}' . format ( self .tea_num, self .name) class Course( object ): """课程类""" def __init__( self , cls_num, cls_name): """ 初始化课程类的基本信息 :param cls_num: 课程编号 :param cls_name: 课程名称 :param cls_teacher: 课程的任课老师 """ self .cls_num = cls_num self .cls_name = cls_name self .cls_teacher = None def binding( self , teacher): """ 实现课程绑定授课教师功能 :param teacher: 授课老师 :return: """ if isinstance (teacher, Teacher): self .cls_teacher = teacher c_dict = {} c_dict.update(课程名称 = self .cls_name, 教师名称 = self .cls_teacher.name) return c_dict else : return {} |
file_exe.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #!/usr/local/bin/python3.7 # @Time : 2020/2/22 11:36 上午 # @Author : Jason # @File : file_exe.py # @Software: PyCharm # 1、从example.py文件中导入学生类,教师类,课程类, from example import Student, Teacher, Course # 2、定义introduction(str)方法,str变量接收标题名字,使用format格式化为效果图中标题的样式,并输出,这里的*号不做数量要求 def introduction( str ): """ 定义标题效果 :param str: 接收标题名字 :return: """ print ( '{0}{1}{2}' . format ( '*' * 40 , str , '*' * 40 )) # 3、自定义prepare_course()方法,创建课程信息初始化,并以列表形式返回所创建的8门课程对象,描述如下: def prepare_course(): """ 创建课程信息初始化,并以列表形式返回所创建的8门课程对象 :return: """ cls_info = { "01" : "网络爬虫" , "02" : "数据分析" , "03" : "人工智能" , "04" : "机器学习" , "05" : "云计算" , "06" : "大数据" , "07" : "图像识别" , "08" : "Web开发" } # 创建空列表 emt_list = [] # (3)循环遍历字典中的数据,将课程编号和课程姓名传入课程类得到课程类的实例,空列表追加每一次的课程类实例 for key, val in cls_info.items(): course = Course(key, val) emt_list.append(course) # (4)返回追加后的列表 return emt_list def create_teacher(): """ 创建教师信息初始化、并返回列表 :return: """ teacher_list = [ [ "T1" , "张亮" , "13301122001" ], [ "T2" , "王朋" , "13301122002" ], [ "T3" , "李旭" , "13301122003" ], [ "T4" , "黄国发" , "13301122004" ], [ "T5" , "周勤" , "13301122005" ], [ "T6" , "谢富顺" , "13301122006" ], [ "T7" , "贾教师" , "13301122007" ], [ "T8" , "杨教师" , "13301122008" ] ] tea_empty_list = [] for info in teacher_list: # (1)将教师信息的每条数据分别传入教师类,分别使用变量接收 teacher = Teacher(info[ 0 ], info[ 1 ], info[ 2 ]) # (2)创建列表存储步骤(1)教师类的八个实例对象,并返回 tea_empty_list.append(teacher) return tea_empty_list def course_to_teacher(): """ 实现课程与教师逐一绑定(每一课程信息绑定倒叙的每一老师信息),并以列表形式返回所课程与教师的绑定结果 :return: """ # (1)创建空列表 empty_list = [] # (2)调用课程信息初始化方法,使用变量ls_course接收 ls_course = prepare_course() # (3)调用教师信息初始化方法,使用变量ls_teacher接收 ls_teacher = create_teacher() ls_teacher.reverse() # (4)循环遍历课程信息初始化方法的长度:结合课程信息初始化方法与遍历的数字,得到课程信息初始化方法列表中的每条课程类实例,通过每条课程类实例去绑定 # (课程类中已定义绑定方法,直接调用即可) 倒叙的每一条教师类信息,将绑定后的每条数据追加到空列表 for index, cls in enumerate (ls_course): rest = cls .binding(ls_teacher[index]) # (5)返回追加后的列表 empty_list.append(rest) return empty_list def create_student(): """ 创建学生信息初始化,并以列表形式返回所创建的8名学生对象 :return: """ # (1)使用变量ls_student接收学生信息 ls_student = [ "小亮" , "小明" , "李红" , "小丽" , "Jone" , "小彤" , "小K" , "慕慕" ] # (2)使用range取得学号列表,其中学号的范围为1000~1007 stu_num_list = list ( range ( 1000 , 1008 )) stu_num_list.reverse() # (3)创建空列表 stu_list = [] # (4)循环遍历学生信息的长度,将学号与(据效果图所示)倒叙的学生姓名传入学生类,得到学生类的实例,将学生类实例追加至空列表 for index in range ( len (ls_student)): j = - (index + 1 ) student = Student(stu_num_list[index], ls_student[j]) stu_list.append(student) # (5)返回追加后的列表 return stu_list # 7、根据‘__name__ == __main__’魔法属性,实现函数调用,运行效果与效果图所示,描述如下: if __name__ = = '__main__' : # (1)调用课程绑定教师函数 course_to_teacher_list = course_to_teacher() # (2)调用学生信息初始化函数 student_list = create_student() # (3)调用introduction(str),传入参数,实现效果图标题一展示 introduction( '慕课学院(1)班学生信息' ) # (4)循环输出学生信息 for stu in student_list: print (stu) # (5)调用introduction(str),传入参数,实现效果图标题二展示 introduction( '慕课学院(1)班选课结果' ) # (6)循环遍历课程绑定教师函数的长度,为学生初始化信息的每一对象添加绑定老师之后的课程信息 # # (7)遍历学生初始化信息,实现如效果图Name:xxx, Selected:[{'课程名称': 'xxx', '教师名称': 'xxx'}]的展示 for j in range ( len (course_to_teacher_list)): student_list[j].add_course(course_to_teacher_list[j].get( '课程名称' )) print ( 'Name:{},Selected:[{}]' . format (student_list[j].name, course_to_teacher_list[j])) |
Bass小骏
2020-02-22 00:06:32
1 2 | class Student( object ): def __init__( self , stu_num, name, course = []): |
你先看一下这段代码, 我开始也是这么做的, 也出现了与你一样的问题
后来经过测试, 发现如果在函数初始化定义的时候, 传入了默认值
那么这个默认值指向同一个对象
也就是你无论实例化了多少个Student实例, 初始化函数中传入的course的初始值, 都指向同一个list实例, 解决方法也很简单:
1 2 3 | class Student( object ): def __init__( self , stu_num, name): self .course = [] |
这样做, 就是在你实例化一个Student对象的时候, 将实例化一个list对象传给当前Student实例的course属性
Good Luck!
时间,
2020-02-13 18:26:43
同学,你好。同学可以参考下述代码实现功能:
1 2 3 4 5 6 7 8 9 | def course_to_teacher(): course_to_teacher_ls = [] ls_1 = prepare_course() ls_2 = create_teacher() for i in range ( len (ls_1)): # 实现倒叙绑定 dic = ls_1[i].binding(ls_2[ len (ls_1) - 1 - i]) course_to_teacher_ls.append(dic) return course_to_teacher_ls |
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
1.Python零基础入门
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧