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

你好,我在写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 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 in range(0len(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(10001007+1))
    for 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

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('*' * 40str'*' * 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(10001008))
    stu_num_list.reverse()
    # (3)创建空列表
    stu_list = []
    # (4)循环遍历学生信息的长度,将学号与(据效果图所示)倒叙的学生姓名传入学生类,得到学生类的实例,将学生类实例追加至空列表
    for index in range(len(ls_student)):
        = -(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 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-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

同学,你好。同学可以参考下述代码实现功能:

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 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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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