为什么课程和教师名称为None

为什么课程和教师名称为None

''' 相关类的定义 '''


# 定义学生类
class Student():
   ''' 描述学生的学号、姓名、已选课程(默认值为空列表)三项信息 '''
   def __init__(self, s_name, s_id):
       self.s_name = s_name
       self.s_id = s_id
       self.s_c = []

   # 1.设定course_detail方法以属性的方式返回学生的已选课程信息
   def course_detail(self):
       return self.s_c

   # 2.设定add_course(self,cour_info)方法,实现添加课程信息(cour_info)至学生对象的已选课程属性
   def add_course(self, cour_info):
       self.s_c.append(cour_info)

   # 3.正确设置学生类信息的字符串(__str__(self))显示方法,返回如效果图所示学生信息表的学生姓名,学生学号
   def __str__(self):
      print('name:{0},s_number:{1}'.format(self.s_name, self.s_id))



# 定义教师类
class Teacher():
   ''' 描述教师编号、教师姓名、手机号码三项信息 '''
   def __init__(self, t_id, t_name, t_p):
       self.t_name = t_name
       self.t_id = t_id
       self.t_p = t_p
   # 正确设置教师类信息的字符串(__str__(self))显示方法
   # 返回教师编号与教师姓名属性
   def __str__(self):
       print('ID:{0},t_name:{1}'.format(self.t_id, self.t_name)
)


# 定义课程类
class Curriculum():
   ''' 描述课程编号、课程名称、授课教师(teacher默认值为None) '''
   def __init__(self,c_id, c_name, teacher = None):
       self.c_id = c_id
       self.c_name = c_name
       self.teacher = teacher

   #  设定binding(self,teacher)方法实现课程绑定授课教师功能
   def binding(self,teacher):
   #1)使用if语句判断教师类的实例是否存在,
       if self.teacher == teacher:
   # 如果存在,将该实例赋值给课程类的授课教师属性,
   # 并将课程名称和教师名称包装成字典进行返回,
   # 如效果图{'课程名称': 'xxx', '教师名称': 'xxx'}格式。
           print("[{{'课程名称':'{1}','教师名称':'{2}'}}]".format(self.c_name,self.teacher))
   #2)如果不存在教师类的实例,返回空
       else:
           return None



''' 实现相应的业务逻辑 '''
#从example.py文件中导入学生类,教师类,课程类
import example


# 1.定义introduction(str)方法,str变量接收标题名字,使用format格式化为效果图中标题的样式,并输出
def introduction(st):
   print('*****慕课学院(1)班{0}*****'.format(st))


# 2.自定义prepare_course()方法,创建课程信息初始化,并以列表形式返回所创建的8门课程对象
def prepare_course():
   c = {  "01": "网络爬虫", "02": "数据分析",
          "03": "人工智能", "04": "机器学习",
          "05": "云计算",   "06": "大数据",
          "07": "图像识别", "08": "Web开发"}
   c_list = []
   for k,v in c:
       c_list.append(example.Curriculum(k,v))
   return c_list


# 3.自定义create_teacher()方法,创建教师信息初始化,并以列表形式返回所创建的8名教师对象
def create_teacher():
   t = [[ "T1", "张亮", "13301122001"],
        ["T2", "王朋", "13301122002"],
        ["T3", "李旭", "13301122003"],
        ["T4", "黄国发", "13301122004"],
        ["T5", "周勤", "13301122005"],
        ["T6", "谢富顺", "13301122006"],
        ["T7", "贾教师", "13301122007"],
        ["T8", "杨教师", "13301122008"]]
   t_list = []
   for i in t:
       t_list.append(example.Teacher(i[0],i[1],i[2]))
       return t_list
# 4.自定义course_to_teacher()方法,实现课程与教师逐一绑定(每一课程信息绑定倒叙的每一老师信息)
# 并以列表形式返回所课程与教师的绑定结果
def course_to_teacher():
   b_list = []
   ls_course = prepare_course()
   ls_teacher = create_teacher()
   for j in range(0,len(ls_course)):
       b_list.append(ls_course[j].binding(len(ls_teacher)-(j+1)))
   return b_list


# 5.自定义create_student()方法,创建学生信息初始化,并以列表形式返回所创建的8名学生对象
def create_student():
   ls_student = ["小亮", "小明", "李红", "小丽", "Jone", "小彤", "小K", "慕慕"]
   ids = range(1000,1008)
   s_list = []
   for i in range(len(ids)):
       s_name_id = example.Student(ls_student[-(i+1)],ids[i])
       s_list.append(s_name_id)
   return s_list
# 6.根据‘__name__ == __main__’魔法属性,实现函数调用,运行效果与效果图所示
if __name__ == '__main__':
   # (1)调用课程绑定教师函数
   b_list = course_to_teacher()
   # (2)调用学生信息初始化函数
   s_list = create_student()
   # (3)调用introduction(str),传入参数,实现效果图标题一展示
   introduction('学生信息')
   # (4)循环输出学生信息
   for j in s_list:
       j.__str__()
   # (5)调用introduction(str),传入参数,实现效果图标题二展示
   introduction('选课结果')
   # (6)循环遍历课程绑定教师函数的长度,为学生初始化信息的每一对象添加绑定老师之后的课程信息
   for j in range(len(b_list)):
       s_list[j].add_course(b_list[j])
   # (7)遍历学生初始化信息,实现如效果图Name:xxx, Selected:[{'课程名称': 'xxx', '教师名称': 'xxx'}]的展示
   for i in s_list:
       print('Name:{}, Selected:{}'.format(i.s_name,i.course_detail()))





*****慕课学院(1)班学生信息*****

name:慕慕,s_number:1000

name:小K,s_number:1001

name:小彤,s_number:1002

name:Jone,s_number:1003

name:小丽,s_number:1004

name:李红,s_number:1005

name:小明,s_number:1006

name:小亮,s_number:1007

*****慕课学院(1)班选课结果*****

Name:慕慕, Selected:[None]

Name:小K, Selected:[None]

Name:小彤, Selected:[None]

Name:Jone, Selected:[None]

Name:小丽, Selected:[None]

Name:李红, Selected:[None]

Name:小明, Selected:[None]

Name:小亮, Selected:[None]


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。同学代码有以下几处导致输出结果是none:

  1. 循环课程信息字典时,需要用item()函数将字典数据数据取出;

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

  2. 返回初始化教师信息时,直接在for循环中返回,只会有一个教师的信息的列表,需要在循环结束后返回所有教师信息的列表。

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

  3. 循环绑定教师信息时,blinding()函数的参数应是教师列表的数据,同学这里只传递了教师列表的长度,导致b_list数据是none。

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

  4. 判断教师信息是否存在,直接判断参数teacher是否有数据就可以了,在返回时,需要return返回结果,print()函数只打印了结果,没有返回数据。

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

同学可以进行相应的修改。

如果解决了你的疑惑,请采纳,祝学习愉快~ 



  • 星维 提问者 #1
    最后,self.teacher.t_name中 为什么要加上.t_name
    2020-03-30 15:34:06
  • 好帮手慕笑蓉 回复 提问者 星维 #2
    同学,你好。结果只要求输出教师名称,因此加上了.t_name。 如果解决了你的疑惑,请采纳,祝学习愉快~
    2020-03-30 15:45:51
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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