add_course中extend 和append的区别
如题, 在add course方法中如果使用append可以得到正确结果, 但extend就不行
class Student(object): ''' 描述学生的学号、姓名、已选课程(默认值为空列表) ''' __slots__ = ("__stuId", "__name", "__selectedCourse") def __init__(self, stu_id, stu_name,selected_course=[]): self.__stuId = stu_id self.__name = str(stu_name).title() self.__selectedCourse= selected_course[:] @property def stuId(self): return self.__stuId # 设定学号为4位数字 @stuId.setter def stuId(self, stu_id): if isinstance(stu_id, int) and len(str(stu_id)) == 4: self.__stuId = stu_id else: raise ValueError("学号为4位数字") @property def name(self): return self.__name # 名字不能含有数字 @name.setter def name(self, stu_name): if str(stu_name).isalpha(): self.__name = str(stu_name).title() else: raise ValueError("名字不能含有数字") # 设定course_detail方法以属性的方式返回学生的已选课程信息 @property def course_detail(self): ''' # 设定course_detail方法以属性的方式返回 :return: 学生的已选课程信息 ''' return self.__selectedCourse def add_course(self, course_info): ''' 设定add_course(self,cour_info)方法,实现添加课程信息(cour_info)至学生对象的已选课程属性 :param course_info: 添加课程信息 ''' if course_info in self.__selectedCourse: print("{{{}}}课程已被选".format(course_info)) else: # 为什么这里用extend最后输出的结果就不一样? self.__selectedCourse.append(course_info) def __str__(self): ''' 设置学生类信息的字符串(__str__(self))显示方法 :return: 学生信息表的学生姓名,学生学号 ''' return "name: {name}, s_number: {stuId}".format(name=self.__name, stuId=self.__stuId) class Teacher(object): ''' 描述教师编号、教师姓名、手机号码三项信息 ''' __slots__ = ('__teacherId', '__name', '__phone') def __init__(self, id, name, phone): self.__teacherId = id self.__name = str(name).title() self.__phone = phone def __str__(self): ''' 教师类信息的字符串(__str__(self))显示方法 :return: 教师编号与教师姓名属性 ''' return "Teacher Id: {0}, name: {1}".format(self.__teacherId, self.__name) @property def id(self): return self.__teacherId @property def name(self): return self.__name @property def phone(self): return self.__phone @phone.setter def phone(self, phone_num): if str(phone_num).isdigit() and len(str(phone_num)) == 11: self.__phone = phone_num else: print("请输入正确11位手机号") class Course(object): """ 描述课程编号、课程名称、授课教师(teacher默认值为None) """ def __init__(self, course_id, course_name, teacher=None): self.courseId = course_id self.courseName = course_name # 私有属性, 利用binding方法改变 self.__teacher = teacher def binding(self, teacher): ''' 课程绑定授课教师功能 :param teacher: 教师类的实例 :return: 课程名称和教师名称包装成的字典, 如果不存在教师类的实例,返回空 ''' result = None if isinstance(teacher, Teacher): self.__teacher = teacher result = dict(课程名称=self.courseName, 教师名称=teacher.name) return result
from models.example import Student, Teacher, Course def introduction(title, star_num): ''' 定义introduction(title)方法 :param title: 接收标题名字 :param star_num: * 的数量 ''' print("{star}{title}{star}".format(star='*' * star_num, title=title)) def prepare_course(): ''' 创建课程信息初始化,以列表形式返回所创建的8门课程对象 :return: 以列表形式返回所创建的8门课程对象 ''' # 1.创建字典接收课程信息 course_dict = dict() course_name_list = ["网络爬虫", "数据分析", "人工智能", "机器学习", "云计算", "大数据", "图像识别", "Web开发"] # 课程编号格式化为 “01” 形式 course_id = list(map(lambda x: "0" + str(x), range(1, 9))) for i in range(len(course_id)): course_dict[course_id[i]] = course_name_list[i] # 2.创建空列表 course_list = list() # 3.循环遍历字典中的数据,将课程编号和课程姓名传入课程类得到课程类的实例,空列表追加每一次的课程类实例 for c_id, c_name in course_dict.items(): course = Course(c_id, c_name) course_list.append(course) # 4.返回追加后的列表 return course_list def create_teacher(): ''' 创建教师信息初始化,并以列表形式返回所创建的8名教师对象 :return:以列表形式返回所创建的8名教师对象 ''' # 将教师信息的id, 名字和手机分别一一对应序列化 teacher_name_list = ["张亮", "王朋", "李旭", "黄国发", "周勤", "谢富顺", "贾教师", "杨教师"] # 用map函数生成教师id T1 - T8 teacher_id_list = list(map(lambda x: "T" + str(x), range(1, 9))) # 用map函数生成教师手机 teacher_phone_list = list(map(lambda x: str(x), range(13301122001, 13301122009))) # 根据序列化后的教师信息生成8个教师实例 teacher_list = [] for i in range(len(teacher_id_list)): t_id = teacher_id_list[i] t_name = teacher_name_list[i] t_phone = teacher_phone_list[i] teacher_list.append(Teacher(t_id, t_name, t_phone)) return teacher_list def course_to_teacher(): ''' 实现课程与教师逐一绑定(每一课程信息绑定倒叙的每一老师信息),并以列表形式返回所课程与教师的绑定结果 :return: 以列表形式返回所课程与教师的绑定结果 ''' course2teacher = [] # 调用课程信息初始化方法,使用变量ls_course接收 ls_course = prepare_course() # 调用教师信息初始化方法,使用变量ls_teacher接收 ls_teacher = create_teacher() # course 和teacher信息绑定 num = len(ls_course) for i in range(num): # 每一课程信息绑定倒叙的每一老师信息 result = ls_course[i].binding(ls_teacher[num - 1 - i]) course2teacher.append(result) return course2teacher def create_student(): ''' 创建学生信息初始化,并以列表形式返回所创建的8名学生对象 :return:以列表形式返回所创建的8名学生对象 ''' # 使用变量ls_student接收学生信息 ls_student = ["小亮", "小明", "李红", "小丽", "Jone", "小彤", "小K", "慕慕"] # 使用range取得学号列表,其中学号的范围为1000~1007 ls_stu_id = [i for i in range(1000, 1008)] # 循环遍历学生信息的长度,将学号与(据效果图所示)倒叙的学生姓名传入学生类,得到学生类的实例,将学生类实例追加至空列表 student_list = [] num = len(ls_student) for i in range(num): student_list.append(Student(ls_stu_id[i], ls_student[num - 1 - i])) return student_list if __name__ == "__main__": # (1)调用课程绑定教师函数 course_teacher_list = course_to_teacher() # (2)调用学生信息初始化函数 student_list = create_student() # (3)调用introduction(str),传入参数,实现效果图标题一展示 introduction("慕课学院(1)班学生信息", 20) # (4)循环输出学生信息 for stu in student_list: print(stu) # (5)调用introduction(str),传入参数,实现效果图标题二展示 introduction("慕课学院(1)选课结果", 20) # (6)循环遍历课程绑定教师函数的长度,为学生初始化信息的每一对象添加绑定老师之后的课程信息 for i in range(len(course_teacher_list)): student_list[i].add_course(course_teacher_list[i]) # (7)遍历学生初始化信息,实现如效果图Name:xxx, Selected:[{'课程名称': 'xxx', '教师名称': 'xxx'}]的展示 for stu in student_list: print("Name: {name}, Selected: {course}".format(name=stu.name, course=stu.course_detail))
15
收起
正在回答 回答被采纳积分+1
1回答
1.Python零基础入门
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星