内容正文:
年级
高一
课题
2.4可以复用的代码
课时
1
教材分析
本节课是第2单元“编程计算”的最后一节,也是难度最大的一节。在此之前,学生已经学习了顺序、分支、循环三种结构,能用Python解决一些简单问题。这节课要解决的核心问题是:当程序变复杂、代码中出现大量重复时,怎么让代码“瘦下来”。
教材围绕“火柴棒摆数字”这个经典问题展开,引导学生经历从“不用函数”到“用函数”再到“发布模块”的完整过程。函数解决的是“程序内的代码复用”,模块解决的是“程序间的代码共享”。本节课内容对后续学习迭代、递归及算法设计有重要作用。
学情分析
授课对象是宁夏高一年级学生。前面几节学下来,学生基本能看懂简单的Python代码了,但动手写的能力参差不齐。缩进不规范、冒号遗漏、全角半角符号混用——这些老问题还是普遍存在。
学生之前习惯了“线性思维”——程序从头写到尾,遇到重复的就复制粘贴。让他们接受“先定义一个函数再用”这种非线性的思维方式,是这节课最大的坎。另外,“计算一个数需要多少根火柴棒”的算法涉及循环取余和整除,对部分学生来说有一定难度,教师可以借助流程图帮助学生理解
教学目标
1.信息意识:能识别程序中重复出现的代码片段,理解代码复用是提升编程效率的重要途径,形成主动寻求复用的意识
2.计算思维:掌握“自顶向下、逐步细化”的模块化程序设计思想,能根据实际问题定义函数并正确调用,体会“分而治之”的问题解决方法
3.数字化学习与创新:熟练使用Python开发环境编写、调试自定义函数,体验模块发布与导入的完整流程
4.信息社会责任:理解代码共享在开源社区中的意义,形成尊重他人知识产权、乐于分享自己成果的意识
教学重点
1.将复杂问题拆解为若干子问题的“自顶向下、逐步细化”思想
2.自定义函数的定义格式(def语句、函数名、参数、函数体、return返回值)
3.函数的调用方法及参数传递过程
4.模块发布和导入的基本步骤
教学难点
1.“计算一个数需要多少根火柴棒”的算法设计与流程图绘制
2.理解函数定义和调用的执行流程——定义时函数体不执行,调用时才执行
3.形参与实参的对应关系
教学方法
采用任务驱动法为主,辅以对比教学法和小组协作法。整节课围绕“火柴棒摆数字”这一核心任务展开,采用“自顶向下、逐步细化”的问题拆解策略:先把大问题分解为“穷举数字”和“计算火柴棒数”两个子问题,再分别解决。学生在“不用函数”和“用函数”的对比中体会代码复用的价值。
教学准备
· 教学环境:多媒体网络机房,安装Python IDLE或Thonny
· 教学资源:课件、学案、半成品代码文件
· 数据准备:火柴数字对照表 f = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6](0-9各数字所需火柴棒数)
教学过程
教师活动
学生活动
设计意图
环节一:
情境导入——6根火柴能摆出哪些数?(8分钟)
1.导入“同学们,先看大屏幕。这是0到9用火柴棒摆出来的样子。问大家一个问题:如果有6根火柴棒,全部用完,能摆出哪些自然数?”
2. 教师追问:“6根火柴能摆出的最大数是多少?”
引导学生发现数字“1”只用2根火柴,是最省火柴的数字,所以6根火柴最多能摆111,不会超过这个数。
3.思考“现在问题来了——如果让计算机帮我们把所有答案都找出来,怎么写程序?”
教师在黑板上记录:从0到111挨个判断,每个数需要几根火柴,刚好6根就输出。
让学生先自己猜几个答案。学生可能说0、6、9、14、77等。
观察火柴数字图片,思考并列举可能的答案,参与讨论算法思路。
火柴棒问题带有游戏性质,能快速吸引学生注意力。从“找答案”到“设计算法”的过渡自然发生,为后续引入函数做铺垫。
环节二:
问题拆解——用流程图梳理思路(10分钟)
1.拆成两个小问题
1)穷举范围:从0到111,依次判断每个数
2)计算火柴棒数:给定一个数字,算出它需要几根火柴棒
教师画流程图
2.怎么计算一个数字需要几根火柴棒?”
引导学生的思路:
1)把这个数除以10取余,得到个位数
2)查表得到个位数需要的火柴棒数,累加起来
3)把这个数除以10取整,去掉个位数
4)重复以上步骤,直到这个数变成0
分析:‘计算火柴棒数’的功能,在穷举循环里要被反复用到。如果我们把这段逻辑单独封装起来,需要的时候调用就行——这就是今天要学的函数。
在学案上补充完成“计算一个数需要多少根火柴棒”的流程图。小组内部互相检查流程图是否正确
“自顶向下、逐步细化”是本节课要渗透的核心思想。先用流程图把问题可视化,降低认知门槛。把“计算火柴棒数”从主问题中剥离出来,为引入函数做铺垫——学生看到的是“这个功能要被反复用”,自然就理解了“为什么需要函数”
环节三:
认识函数——从概念到定义(12分钟)
1. 思考:“什么是函数?大家已经用过print()和input(),这些就是系统自带的函数。现在我们要自己写一个——这叫用户自定义函数。”
2.板书函数定义的基本格式:
python
def 函数名(参数):
# 函数体
return 返回值
强调:“函数的四部分:函数名、参数、返回值、函数体。其中函数名和函数体必须有,参数和返回值根据需要来。”
3.把刚才“计算火柴棒数”的逻辑写成函数:
python
def match_num(num):
f = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
total = 0
if num == 0:
return f[0]
while num > 0:
digit = num % 10
total = total + f[digit]
num = num // 10
return total
重点强调几个易错点:
· def后面有冒号,不能忘
· 函数体要缩进,和if、for一样
· return返回结果,函数执行到这里就结束
在电脑上照着教师的代码输入函数定义。然后试着调用:
python
print(match_num(6))
print(match_num(14))
验证结果是否正确。
先让学生“照着做”建立感性认识,再去理解抽象概念。把“菜谱”这个类比作为讲解执行流程的辅助,帮助学生理解“定义不等于执行”。
环节四:
调用函数——完成火柴棒问题(10分钟)
1.展示火柴棒问题完整代码
2.强调参数传递:调用时写的i是实参,定义时写的num是形参——实参的值传给形参,函数内部用的是形参
在电脑上运行完整程序,验证输出结果。然后修改snum的值,测试不同火柴棒数量的情况。
展示“写完函数后主程序多干净”的效果,让学生直观感受函数的价值。通过修改snum体会“一次编写,多次调用”的复用思想。
环节五:
课堂小结(5分钟)
1.表格对比“不用函数”和“用函数”的区别:
不用函数
用函数
代码结构
大量重复代码
封装复用
可读性
差
好
修改维护
改一处要改多处
只改函数内部
可移植性
差
好
“函数的核心价值:把重复的代码封装起来,需要的时候调用就行。”
2.布置课后作业:预习课本模块发布相关内容。
完成学案上的课堂检测
用对比表格帮助学生建立清晰的知识结构。课堂检测即时反馈学习效果。
学科网(北京)股份有限公司
$