第8课 列表进阶——排序、查找与二维列表 教学设计+html素材 小学信息科技Python程序设计

资源下载
  1. 二一教育资源

第8课 列表进阶——排序、查找与二维列表 教学设计+html素材 小学信息科技Python程序设计

资源简介

/ 让教学更有效 精品试卷 | 信息
小学四—五年级 Python 程序设计(第一学期)
教 学 设 计
第8课 列表进阶——排序、查找与二维列表
课  题 第8课 列表进阶——排序、查找与二维列表
课  时 第 8 课时(40 分钟)
课  型 新授 + 竞赛衔接
教学环境 机房(Windows + Python 3.x + IDLE/Thonny)
授课班级 四年级、五年级
一、学情分析
学生已掌握列表的创建、append、下标访问与 len/sum/max/min 统计四件套,能完成「录入 n 个数 → 求最值」的直线型任务。本课把列表从「存数据」推进到「理数据」——排序与查找,这是竞赛中出现频率最高的两项操作。
学生的主要困难有三点:
1.「排序」听起来抽象,不清楚内部是靠反复比较交换完成的;
2.混淆「值」与「下标」,写冒泡排序时容易把 a[i] 与 i 用错;
3.二维列表 a[i][j] 的双下标读法(先行后列)尚未建立直观图景。
本课用「整理一叠成绩单」的实物情境贯穿,先建立动作直觉,再落到代码。
二、教学目标
(一)知识目标
1.掌握列表的排序:sort() 原地排序与 sorted() 返回新列表,认识 reverse=True。
2.掌握顺序查找(线性查找)的思路与写法,理解它「最坏要找 n 次」的代价。
3.认识二维列表,掌握 a[i][j] 的创建、赋值与双重循环遍历。
(二)能力目标
1.能独立编写冒泡排序程序,并用「相邻比较、逆序交换」解释每一轮的效果。
2.能用顺序查找在列表中定位某数,找不到时输出明确提示。
3.能读取并输出一个二维列表(如班级各科成绩表、矩阵)。
(三)素养目标
1.体会「排序是后续查找、统计、排名的基础」,建立算法之间的关联意识。
2.初步接触算法效率的比较(顺序查找 vs 二分查找),形成优化意识。
三、教学重点与难点
项 目 内 容
教学重点 sort()/sorted() 的用法;冒泡排序的双层循环结构;二维列表 a[i][j] 的双下标访问。
教学难点 冒泡排序中「值」与「下标」的区分;二维列表的双重循环遍历顺序(先行后列)。
四、教学准备
· 教师:课件、一叠写有分数的卡片(供演示排序)、班级成绩矩阵表。
· 学生:练习卷、上机账号。
· 素材:本课 5 个程序文件 1排序基础.py ~ 5矩阵遍历.py。
五、教学过程(共 40 分钟)
环节一 复习导入:从「求最值」到「排队」(5 分钟)
出示成绩列表 [88, 92, 75, 60, 95],提问:「上一课我们能用 max() 找出最高分。但如果老师想知道第二名、第三名分别是谁,只找出最高分还够用吗?」
学生意识到:必须先「排好队」才能看名次。引出本课主题——排序与查找。
【设计意图】用「排名」这一真实需求说明排序的必然性,让学生自己感到梯度,而非被动接受新语法。
环节二 新授:排序的两种写法(10 分钟)
演示 1排序基础.py。
a = [88, 92, 75, 60, 95]
a.sort() # 从小到大,直接改 a 自己
print(a)
b = [88, 92, 75, 60, 95]
c = sorted(b, reverse=True) # 从大到小,b 不变,c 是新列表
print(b)
print(c)
讲解两条关键区别(板书对比):
写 法 原列表会变吗 返回什么
a.sort() 会变(原地排序) 什么都不返回(是 None)
sorted(a) 不变 排好序的新列表
常见错误提醒:写成 print(a.sort()) 会输出 None,因为 sort() 是「对你动手」,不是「给我一个结果」。
追问:如果既要按分数从高到低排,还希望保留原始名单顺序怎么办?→ 用 sorted(),把结果赋给新变量。
环节三 新授:冒泡排序——排序是怎么发生的(12 分钟)
提问:「电脑不会像人一样一眼看出谁最高。它只能用最笨的办法——两两比较,谁大谁往后挪。我们用 5 张卡片现场演示。」
请 5 名学生各拿一张分数卡片站成一排,教师逐对比较、交换,让学生亲眼看到最大数如何像泡泡一样「冒」到最右边。
演示 2冒泡排序.py。
a = [5, 3, 8, 1, 9]
n = len(a)
for i in range(n - 1):
for j in range(n - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j] # 交换
print(a)
逐层拆解两个循环的分工:
循环 变量 作 用
外层 i 第 i 轮,共 n-1 轮;每轮把剩下的最大数送到末尾
内层 j 一轮中的相邻比较,范围 n-1-i(后面 i 个已排好)
交换 a[j], a[j+1] 只要前一个比后一个大,就交换位置
手动模拟 a = [5, 3, 8, 1, 9],重点看第一轮 j = 0~3:
j 比较 是否交换 本轮后的列表
0 5 > 3 是 [3, 5, 8, 1, 9]
1 5 > 8 否 [3, 5, 8, 1, 9]
2 8 > 1 是 [3, 5, 1, 8, 9]
3 8 > 9 否 [3, 5, 1, 8, 9]
结论:第一轮结束后,最大的 9 已经稳稳落在最后一位。第二轮只需比较前 3 个,依此类推——这就是内层写成 n-1-i 的原因。
关键提问:为什么内层是 a[j] 和 a[j+1] 比较,而不是 a[i]?→ 因为 i 管「第几轮」,j 管「这一轮比到哪儿」;真正被比较的是列表里的值,要用下标去取。
Python 特色:交换两个数不必借助中间变量,a[j], a[j+1] = a[j+1], a[j] 一行搞定,要讲清右边先算完再整体赋值。
【设计意图】冒泡排序是学生第一次接触「算法」,重点不在背代码,而在建立「重复比较 + 逐步缩小范围」的思维模型。实物演示先建直觉,再落代码,符合小学生的认知顺序。
环节四 新授:顺序查找(8 分钟)
演示 3顺序查找.py。
a = [88, 92, 75, 60, 95]
target = int(input("请输入要查找的分数:"))
pos = -1
for i in range(len(a)):
if a[i] == target:
pos = i
break
if pos == -1:
print("没有找到")
else:
print(f"找到了,在第 {pos + 1} 个位置")
三个要点:
(1)pos 初值设成 -1 是个约定——表示「还没找到」;因为下标不会是负数,所以 -1 一定是「不合法」的标志。
(2)找到后必须 break,否则后面的数会继续覆盖 pos,最后留下的是「最后一次出现」的位置。
(3)输出位置时用 pos + 1,把从 0 开始的下标翻译成人的「第几个」习惯。
提问:如果列表有 1000 个数,要找的数恰好在最后一位,这个循环要比多少次?→ 最多 1000 次。这正是下一课二分查找要解决的问题,先埋下伏笔。
环节五 新授:二维列表(5 分钟)
演示 5矩阵遍历.py。
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j], end=" ")
print()
用「表格」比喻讲双下标(板书):
j=0 j=1 j=2
i=0 1 2 3
i=1 4 5 6
i=2 7 8 9
a[1][2] → 第 1 行第 2 列 → 6
先找行(第 i 个子列表),再找列(该子列表的第 j 个)
朗读规则:a[i][j] 要「从左往右读」——先取第 i 行,再取该行的第 j 个,不要读成 a[i] 与 a[j]。
应用举例:一张班级成绩表,每一行是一个学生,每一列是一科成绩,这样 sum(a[i]) 就是第 i 个学生的总分。
环节六 分层练习与总结(0 分钟,练习移至课后)
课堂布置练习卷对应题目,★层做排序与查找的补全,★★层独立写冒泡排序与查找,★★★层做矩阵与排名。
本课一句话总结:排序是「反复比较、逐步归位」,查找是「逐个比对、找到就停」;二维列表不过是一张表,先用 i 找行,再用 j 找列。
六、板书设计
第8课 列表进阶
a.sort() 原地从小到大
sorted(a) 返回新列表
reverse=True 从大到小
冒泡排序
for i in range(n-1): 第 i 轮
for j in range(n-1-i): 相邻比较
if a[j] > a[j+1]:
a[j],a[j+1] = a[j+1],a[j]
顺序查找:pos = -1;找到赋值并 break
二维列表 a[i][j]:先找行 i,再找列 j
七、分层作业
★ 完成练习卷第一、二、三题(填空、判断、手算模拟)。
★★ 完成练习卷第四、五题:手写冒泡排序;录入 5 个数排序后输出,再查找其中某个数。
★★★ 完成练习卷第六题:录入 n 个学生的语文、数学两科成绩(二维列表),输出每个学生的总分,并按总分从高到低排序输出名次。
八、教学反思要点
1.实物卡片演示是否有效?有多少学生能在不看代码的情况下说出第一轮做了什么?
2.a[j] 与 a[j+1] 的比较是否仍有学生写成 a[i]?是否需要再画一次下标箭头图?
3.二维列表的双下标读法(先行后列)是否全班都掌握?可抽查 a[1][2] 的值。
4.顺序查找的 pos = -1 约定学生是否理解?是否需要用「找不到就给个假位置」再解释一次?
课后记(教师填写):
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)

展开更多......

收起↑

资源预览