你好,我在写course_to_teacher 卡住了 需要帮助

你好,我在写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

正在回答 回答被采纳积分+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-22 10:54:03
好帮手慕美 2020-02-14 10:04:07

同学,你好。在Course()中的binding()方法中,教师名称对应的值应为教师对象中的name属性才会显示教师名称:self.cour_teacher.name

http://img1.sycdn.imooc.com//climg/5e45ff8f091bca9e07260352.jpg

效果图:

http://img1.sycdn.imooc.com//climg/5e4600060900079f05530193.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 慕虎4621838 #1
    最后还有一个问题 我在最后显示选课结果的时候变成了这样的内容 Name: 李红, Selected: [{'课程名称': '网络爬虫', '教师名称': '杨教师'}, {'课程名称': '数据分析', '教师名称': '贾教师'}, {'课程名称': '人工智能', '教师名称': '谢富顺'}, {'课程名称': '机器学习', '教师名称': '周勤'}, {'课程名称': '云计算', '教师名称': '黄国发'}, {'课程名称': '大数据', '教师名称': '李旭'}, {'课程名称': '图像识别', '教师名称': '王朋'}, {'课程名称': 'Web开发', '教师名称': '张亮'}] Name: 小明, Selected: [{'课程名称': '网络爬虫', '教师名称': '杨教师'}, {'课程名称': '数据分析', '教师名称': '贾教师'}, {'课程名称': '人工智能', '教师名称': '谢富顺'}, {'课程名称': '机器学习', '教师名称': '周勤'}, {'课程名称': '云计算', '教师名称': '黄国发'}, {'课程名称': '大数据', '教师名称': '李旭'}, {'课程名称': '图像识别', '教师名称': '王朋'}, {'课程名称': 'Web开发', '教师名称': '张亮'}] Name: 小亮, Selected: [{'课程名称': '网络爬虫', '教师名称': '杨教师'}, {'课程名称': '数据分析', '教师名称': '贾教师'}, {'课程名称': '人工智能', '教师名称': '谢富顺'}, {'课程名称': '机器学习', '教师名称': '周勤'}, {'课程名称': '云计算', '教师名称': '黄国发'}, {'课程名称': '大数据', '教师名称': '李旭'}, {'课程名称': '图像识别', '教师名称': '王朋'}, {'课程名称': 'Web开发', '教师名称': '张亮'}] 请问是什么原因啊
    2020-02-14 10:12:47
  • 好帮手慕美 回复 提问者 慕虎4621838 #2
    同学,你好。同学可以在__init__初始化时将已选课程初始值设置为空列表,self.course = []。祝学习愉快~~~~
    2020-02-14 15:20:53
好帮手慕美 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

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 慕虎4621838 #1
    为什么 返回内容中的教师名称是一个对象啊 {'课程名称': '大数据', '教师名称': <example.Teacher object at 0x1058f1730>}
    2020-02-13 19:40:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师