# 智能学生选课推荐系统——课程数据管理与推荐列表生成 教学设计

| **课题** | **智能学生选课推荐系统——课程数据管理与推荐列表生成** |
|---------|------------------------------------------|
| **课时** | 1课时(40分钟) |
| **教学目标** | **知识目标**:掌握Python列表的创建、访问、修改、遍历等基本操作,理解列表的有序性与可变性特点,了解列表常用方法(append、remove、sort等)的功能,认识元组的不可变特性。<br>**技能目标**:能使用列表存储多门课程的信息(课程名、学分、容量等),能结合条件判断从课程列表中筛选符合学生条件的推荐课程,能使用列表方法对推荐结果进行排序与格式化输出,能编写完整的课程推荐脚本。<br>**素养目标**:培养数据组织与批量管理意识,养成数据结构选择的合理性思维,建立"用合适的容器存储批量数据"的工程认知。 |
| **教学重难点** | **重点**:列表的创建与访问方法;列表的遍历与条件筛选;列表常用方法的使用;列表与条件判断、循环的综合应用。<br>**难点**:从课程列表中按条件筛选并生成新列表的逻辑设计;列表嵌套结构(列表中存储字典)的理解与操作;排序方法的参数使用。 |
| **教学资源准备** | 多媒体课件(含列表结构图);课程信息数据表;代码演示环境;列表操作速查表;筛选与排序逻辑流程图。 |

## 教学过程

| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---------|:---------|:---------|:---------|:---------|
| **1. 数据存储需求**<br>(5分钟) | 回顾前三节课内容,引出批量存储课程信息的需求,明确本课时任务:使用列表管理课程数据并实现智能推荐。 | **需求提出**<br>展示选课系统界面,提问:"如果系统有50门课程,用50个变量存储合适吗?"引出批量存储的必要性;<br><br>**任务聚焦**<br>说明本节课将实现推荐引擎的核心功能:从课程库中筛选出符合学生条件的课程并排序推荐。 | **问题思考**<br>思考批量数据管理的方案,回顾上节课循环中使用的列表结构;<br><br>**目标明确**<br>理解本课时是推荐系统的核心模块,连接前面的学生信息与条件判断。 | 通过问题引入激活学生对数据结构的需求意识;通过任务聚焦强化模块在整体项目中的关键地位,建立学习动机。 |
| **2. 列表基础操作**<br>(10分钟) | 讲解列表的创建、访问、修改、遍历等基础操作,演示列表常用方法的使用。 | **概念讲解**<br>讲解列表的定义方式、索引访问(正向、负向)、切片操作,强调列表的有序性与可变性;<br><br>**方法演示**<br>演示常用方法,代码示例:<br>```python<br>courses = ["Python编程", "数据库", "Web开发"]<br>courses.append("数据分析")  # 添加<br>courses.remove("数据库")    # 删除<br>courses.sort()            # 排序<br>for course in courses:<br>    print(course)```<br><br>**实践任务**<br>要求学生创建包含5门课程的列表,练习增删改查操作。 | **聆听理解**<br>理解列表的结构特点,记录基本操作语法;<br><br>**跟随实践**<br>在IDE中输入演示代码,测试各种操作的效果;<br><br>**独立练习**<br>创建课程列表,尝试添加新课程、删除指定课程、遍历输出全部课程。 | 通过系统讲解建立列表的完整认知;通过即时实践强化操作记忆;通过独立练习培养基础操作的熟练度。 |
| **3. 课程数据建模**<br>(11分钟) | 引导学生设计课程信息的数据结构,讲解如何使用字典表示单门课程,用列表存储多门课程。 | **结构设计**<br>引导讨论:"一门课程需要哪些信息?如何用一个变量表示?"引出字典结构;<br><br>**代码演示**<br>演示课程数据建模,代码示例:<br>```python<br>courses = [<br>    {"name":"Python编程", "credits":3, "grade_req":1, "capacity":40},<br>    {"name":"数据分析", "credits":4, "grade_req":2, "capacity":30},<br>    {"name":"Web开发", "credits":3, "grade_req":2, "capacity":35}<br>]<br>for course in courses:<br>    print(f"课程:{course['name']}, 学分:{course['credits']}")```<br><br>**任务发布**<br>要求学生补充课程列表,添加3-5门课程的完整信息。 | **讨论分析**<br>参与讨论,提出课程应包含的字段(课程名、学分、年级要求、容量等);<br><br>**理解结构**<br>理解"列表套字典"的嵌套结构,明确列表管理批量数据、字典管理单个对象的分工;<br><br>**数据填充**<br>按格式添加更多课程数据,确保字段完整准确。 | 通过讨论培养数据建模思维;通过嵌套结构的演示提升数据组织能力;通过数据填充任务巩固结构理解,为后续筛选做准备。 |
| **4. 推荐筛选实现**<br>(11分钟) | 引导学生编写推荐逻辑,结合学生信息与课程要求,从课程列表中筛选符合条件的课程并生成推荐列表。 | **逻辑分析**<br>讲解筛选逻辑:遍历课程列表,判断学生年级是否满足课程要求,若满足则加入推荐列表;<br><br>**代码演示**<br>演示核心筛选代码:<br>```python<br>student_grade = 2<br>recommend_list = []<br>for course in courses:<br>    if student_grade >= course["grade_req"]:<br>        recommend_list.append(course)<br><br># 按学分排序推荐<br>recommend_list.sort(key=lambda x: x["credits"], reverse=True)<br>for course in recommend_list:<br>    print(f"推荐:{course['name']}, 学分:{course['credits']}")```<br><br>**任务发布**<br>要求学生完善筛选条件(增加学分要求、容量限制等),优化输出格式。 | **理解逻辑**<br>理解遍历、条件判断、列表添加的组合流程,明确筛选的实现机制;<br><br>**代码实践**<br>输入演示代码并测试,观察推荐结果;<br><br>**功能扩展**<br>添加更多筛选条件(如学分≥3、容量>0),调整排序规则(如按容量从大到小),美化输出格式。 | 通过逻辑分析将前几节知识综合应用;通过代码演示突破筛选难点;通过扩展任务培养灵活应用能力,完成推荐引擎核心功能。 |
| **5. 系统集成与总结**<br>(3分钟) | 组织学生展示推荐脚本,总结列表在项目中的核心作用,预告后续项目扩展方向。 | **作品点评**<br>邀请学生演示完整推荐流程,点评筛选逻辑的合理性与输出的用户友好性;<br><br>**模块总结**<br>总结:列表是批量数据管理的核心工具,结合条件判断与循环可实现复杂的筛选与推荐逻辑;<br><br>**项目展望**<br>说明前四节课已完成推荐系统的核心功能,后续可扩展:集合去重、字典统计、函数封装、数据持久化等。 | **观摩学习**<br>观看同学作品,学习优秀的筛选逻辑与输出设计;<br><br>**反思总结**<br>回顾四节课的项目进展,梳理知识点间的逻辑关系;<br><br>**展望规划**<br>思考:如何让系统更智能?还可以增加哪些功能? | 通过作品展示检验学习成效;通过模块总结强化列表的核心地位;通过项目展望保持学习热情,为后续深入学习铺垫。 |

## 板书设计

```
课程推荐引擎 - 列表与筛选逻辑

课程数据结构:
  列表 [ 字典1, 字典2, 字典3, ... ]
       ↓
  {"name":"课程名", "credits":学分, "grade_req":年级要求}

推荐流程:
  ① 创建空推荐列表 recommend_list = []
  ② 遍历课程列表 for course in courses:
  ③ 条件判断       if student_grade >= course["grade_req"]:
  ④ 添加推荐         recommend_list.append(course)
  ⑤ 排序输出       recommend_list.sort(...)

常用列表方法:
  .append(元素)   添加到末尾
  .remove(元素)   删除指定元素
  .sort()        排序(可用key参数指定排序依据)

本课时任务: 课程管理 + 智能推荐 ✓
```

## 教学成效与反思

| | |
|:---|:---|
| **教学成效** | 结合模块开发目标评估:85%以上学生能熟练使用列表存储与管理批量课程数据,80%学生能编写包含条件筛选的推荐逻辑,75%学生能使用sort方法对推荐结果进行排序。通过真实推荐场景驱动,学生对列表作为数据容器的核心作用理解深刻,数据组织能力显著提升。课程推荐引擎的基本功能已实现,前四节课构建的项目框架完整,学生对"从需求到实现"的软件开发流程有了初步体验,项目式学习的价值得到充分体现。 |
| **教学反思** | 本课时通过"课程推荐引擎"这一核心模块,成功地将列表、字典、条件判断、循环等知识点综合应用,形成了完整的功能闭环,学习效果显著。"列表套字典"的数据建模方式,让学生理解了复杂数据的组织方法,为后续面向对象学习做好铺垫。不足之处:①lambda表达式在排序中的使用对部分学生理解困难,建议改用更直观的方法或提前渗透函数概念;②筛选逻辑的扩展任务(如多条件组合)难度较大,部分学生未能在课堂完成,建议简化或提供参考代码。改进方向:①将排序演示简化为默认排序,或使用列表推导式等更符合当前认知水平的方法;②将复杂筛选逻辑设计为选做任务,降低核心任务难度。整体上,项目驱动的四课时教学成功地将抽象的编程知识转化为可见、可用的软件功能,学生的学习动力与成就感显著增强,为后续深入学习奠定了坚实基础。 |
