你好,我在写course_to_teacher 卡住了 需要帮助
#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文件
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
#!/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
#!/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
class Student(object): def __init__(self, stu_num, name, course=[]):
你先看一下这段代码, 我开始也是这么做的, 也出现了与你一样的问题
后来经过测试, 发现如果在函数初始化定义的时候, 传入了默认值
那么这个默认值指向同一个对象
也就是你无论实例化了多少个Student实例, 初始化函数中传入的course的初始值, 都指向同一个list实例, 解决方法也很简单:
class Student(object): def __init__(self, stu_num, name): self.course = []
这样做, 就是在你实例化一个Student对象的时候, 将实例化一个list对象传给当前Student实例的course属性
Good Luck!
好帮手慕美
2020-02-13 18:26:43
同学,你好。同学可以参考下述代码实现功能:
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积分~
来为老师/同学的回答评分吧
0 星