--- tid: 32a7as title: Book List Management System --- # 案例:个人书单管理系统 (date: 2025-11-13) 目标: 在15分钟内,将前面学到的零散方法**组合运用**,解决一个稍复杂的实际问题。 ## **第1步:情境引入与任务发布** 现在我们用刚学的List方法,做一个书单管理系统。你有一个读书清单,需要完成三个管理任务。 **初始数据**: ```python # 所有人的初始数据都一样 book_list = ["红楼梦", "三国演义", "百年孤独", "三体", "三国演义", "Python编程", "三体"] ``` **三个任务**: 1. **清理任务**:书单中有重复的书,请去重。 2. **筛选任务**:我只想看标题里带“三”的书。 3. **整理任务**:把书单按书名字母顺序排列。 --- ## **第2步:分步实施与引导** ### **任务1:去重** - **学生动手**:尝试写代码 - **教师巡视**:观察学生方案 [方案分享] ``````{only} show_answer ```python # 方案A(Pythonic):利用集合 unique_books = list(set(book_list)) # 方案B(基础):循环判断 unique_books = [] for book in book_list: if book not in unique_books: unique_books.append(book) ``` `````` - **引导讨论**:“两种方案各有什么优缺点?”(A简洁但丢失原序,B可控但稍慢) ### **任务2:筛选带“三”的书** - **学生动手** [方案分享] ``````{only} show_answer ```python # 方案A(Pythonic):列表推导式 san_books = [book for book in book_list if "三" in book] # 方案B(基础):循环追加 san_books = [] for book in book_list: if "三" in book: san_books.append(book) ``` `````` - **深化理解**:强调 `if "三" in book` 是**字符串包含**判断,与 `if book in book_list`(列表包含)的区别 - **关键讲解**:强调 `"三" in book` 是**字符串包含**判断,与 `"三" in book_list`(列表包含)的区别 ### **任务3:按书名排序** - **学生动手** [方案分享] ``````{only} show_answer ```python # 方法A:直接修改原列表 book_list.sort() # 方法B:创建新列表 sorted_books = sorted(book_list) ``` `````` - **深化理解**:对比 `sort()`(原地修改,返回None)和 `sorted()`(返回新列表)的区别 --- ## **第3步:综合挑战与总结** **终极挑战**: 能不能用一行代码,完成**先去重,再筛选带'三'的书,最后排序**? [最佳答案] ``````{only} show_answer ```python result = sorted([book for book in list(set(book_list)) if "三" in book]) ``` `````` **教师总结**: 1. **方法组合**:`set()` + `list()` + 列表推导式 + `sorted()` 2. **编程思维**:复杂任务可以拆解成多个简单任务 3. **Python哲学**:总有多种方法解决问题,要选择最适合的 --- ## **教学实施要点** 1. **时间控制严格**:每个阶段用倒计时器,确保不超时 2. **鼓励多种解法**:不强求统一答案,展示不同思路 3. **重视错误分析**:收集典型错误代码,现场调试讲解 4. **关注学生差异**:对快的学生提供拓展任务(如:按书名长度排序) 这样的组织实施既保证了教学效率,又给了学生充分的实践和思考空间,真正实现了从“学会方法”到“会用方法”的跨越。