内容正文:
5.2 设计简单程序(第三课时)(教案)
课 题
5.2 设计简单程序(第三课时)
课型
新授课
主备人
集体备课时间
课时安排
教授人
授课班级
授课时间
教学目标
1. 知识与技能
· 理解函数的概念与作用:函数是具有特定功能的可重用代码块,能减少重复、提高代码的模块化程度
· 掌握定义函数的基本语法格式:def 函数名(参数列表): 函数体 return 返回值
· 掌握函数的调用方法与执行顺序:函数必须先定义后调用,调用时程序跳转到函数内部执行,执行完毕后返回到调用处继续向下运行
· 了解变量作用域的基本概念:函数内部定义的变量属于局部作用域,与外部同名变量互不干扰
· 了解局部变量和全局变量的基本概念及其作用范围差异
· 能根据实际需求将重复使用的代码逻辑封装为可复用的函数
2. 过程与方法
· 通过“手机使用时长分级系统封装”项目情境任务驱动,在真实的业务功能模块化需求中掌握函数的定义与调用方法
· 通过“业务流程图→函数结构拆分→逐个函数定义→主程序组装”的分层渐进式开发流程,建立将复杂任务拆解为函数模块的系统化思维
· 通过“手动封装函数—AI生成函数”双模对比体验,建立“效率靠AI、设计靠人脑”的新型编程素养
3. 情感态度与价值观
· 培养代码复用意识与模块化设计思维——“好的程序不是从第一行写到最后一行的长卷,而是由一个个有名字的小组件拼装而成的完整功能系统”
· 在函数命名和注释书写中强化代码规范意识——一个函数名就是一个承诺,好的命名能让合作者不用阅读代码就能大致推测其用途
· 在AI编程对比中建立“函数设计是架构决策,代码生成是执行辅助”的职业认知
教学重点
· 定义函数的基本语法格式:def 函数名(参数): 函数体 return 返回值
· 函数的调用规则与执行顺序:先定义后调用,调用时程序跳转入函数内部执行,完毕后返回调用处
教学难点
· “定义”与“调用”的时序关系——为什么调用语句必须在函数定义之后?Python解释器的自上而下执行机制和函数对象的延迟绑定特性
· 参数传递的单向性——函数内部的运算不会自动改变外部变量的值,除非使用return语句将更新后的新值显式返回给调用方
· 从“面向过程编码”到“面向函数封装”的认知跃迁——何时应把一个代码块封装为函数、如何拆分和命名
学习策略
情境教学法、任务驱动法、先错后正法、对比体验法、演示法、小组合作探究法
设计理念与创新点
1. 情境驱动:延续第5单元“校园手机使用调查”项目情境主线——以“年级组长要求把分级逻辑封装成可复用的函数模块,并升级到可以从文件中读取高亮数据批量生成分析报告”为业务需求,自然引出函数封装学习。项目从5.2.1“一个学生一次判断”到5.2.2“循环批量处理”再到5.2.3“函数模块化封装”——全流程能力的收束与升级
2. 采用“识—拆—写—验—拓”五步递进教学链:识函数(认识函数的概念、语法结构与调用规则)→拆模块(练习将业务流程拆解为函数结构,理解模块化思维)→写函数(动手定义和调用函数,完成功能封装)→验思维(验证函数封装前后的代码量差异和运行一致性,使用变量监测工具理解作用域)→拓视野(AI函数生成对比体验),让教学过程从认知到拆分到编写到验证到拓展层层递进
3. 先错后正法突破定义与调用时序难点:先让学生将调用语句写在定义之前,亲历NameError报错,再通过讲解Python执行机制来理解“先定义后调用”的规则
4. 拆解与对比法:通过对比“未封装的散装代码”与“封装为函数的模块化代码”,帮助学生在差异中内化函数封装的核心价值
5. 框架支撑法:在初次编写函数时为每组提供统一的函数定义骨架(def...return...),保留关键逻辑留白供学生填写,降低自主编码难度并保证首次成功率
教学过程
教学内容
教师活动
学生活动
设计意图
情境唤醒
延续第5单元“校园手机使用调查”项目主线,发布新需求:“上节课的批量分级程序虽然能循环处理全年级学生数据,但年级组长又指出了一个问题——同一个分级逻辑(时长→等级)在三个不同的地方被重复编写:程序开头的欢迎部分、批量循环处理部分、结束后的抽查统计部分——一共出现了三次。如果下学期年级组长要求把分级标准从‘≤2小时优秀自律’改成‘≤3小时优秀自律’,需要在这三处代码中挨个找到、逐行修改。假如某一次改漏了其中一处,程序的输出就会在对同一个学生的同一个数据给出自相矛盾的评级。有没有办法只写一次判断逻辑,用三句话分别调取同一段代码得到一致的分级?”
打开上节课的批量分级程序代码,快速定位分级逻辑所在的三处位置,思考如果修改标准需要找多少个地方
延续第5单元项目情境,以真实代码维护的痛点引出函数封装的核心价值——“将一段多次重复使用、多处调用的相同逻辑提取成一条可以被重复载入执行的代码单元,即函数”——在情境体验中让“为什么要学函数”的答案自然浮现
明确任务
教师总结并分发任务书:“函数是程序设计从‘脚本化编码’迈向‘模块化设计’的第一道门。今天我们将把上节课的批量分级程序升级为模块化版本——①认识函数的语法规则和执行流程;②把分级判断逻辑封装成可复用的函数模块;③在主程序中调用函数完成批量处理,并体验AI如何自动生成函数代码。”
查看任务书,明确任务目标
以版本迭代驱动全课,让学生清晰看到自己从散装代码到模块化设计的能力跃升路径
函数是什么
讲解函数的概念:“函数是具有特定功能的可重用代码块。Python中函数分为内置函数(如print、input、len、sum)和自定义函数两种。内置函数是Python替我们预先写好的函数,而自定义函数是需要用户自己定义的函数。把一段代码装进函数里,给函数起一个名字——以后每次需要执行这段代码时,只需要调用其名字即可,不需要把整段代码重抄一次。”提问:“教材中定义的函数是什么?谁来说说你在预习时看到的最简单的形式?”引导学生结合教材定义归纳函数的核心三要素——输入(参数)→内部处理(函数体)→输出(返回值)——并对比与数学函数y = f(x)的共同特征。”
记录函数的定义,与同桌口头复述并写下函数三要素的笔记;翻开教材对应节次确认函数在Python中的定位
建立函数的基本概念和“封装-复用-调用”的思维模型。与数学函数类比帮助学生借用已熟悉的抽象思维能力来理解一个形式上接近但本质上需要主动定义的编程新工具
定义函数的语法格式
讲解定义函数的语法格式并做全文板书法演示:“使用def关键词定义函数,后面依次接一个空格、函数名、一对小括号(参数列表)、一个冒号,接下来缩进书写函数体,最后用return返回结果。”板书演示一个完整的函数定义示例:def grade_student(name, hours): → 缩进内:if hours <= 2: → level = "优秀自律" → elif hours <= 6: → level = "还需改进" → else: → level = "重度使用" → return f"{name}同学:{level}"(去掉多余的缩进,确保return在函数体内部最末一行)。逐一标注组成函数的def、函数名、参数列表、冒号、缩进的函数体和return语句六组件
在自己的平台上跟做完整输入这个7行的函数并运行,注意每行冒号和缩进的完整性。运行后无任何输出(正常的函数定义成功后屏幕保持空白)——因为目前只定义了函数、还没有调用它
掌握定义函数的完整语法格式。主动制造“定义成功但无输出”的悬念状态,为下一步讲解「调用」和区分定义与调用埋下体验锚点
调用函数
讲解函数调用的规则:“定义好函数后,函数内部的代码并不会自动执行——你需要用函数名()主动调用它,程序才会进入函数内部执行,执行完毕后回到调用处继续向下运行。就像一个电话——你拨号并按拨出键呼叫,对方才知晓你的意图并接通回应。”在已定义函数的末尾处输入一行:result = grade_student("王明", 4.5) → print(result) → 运行程序,观察输出。对比演示——在一份新文件中先调用、后定义:grade_student("王明", 4.5)写在第1行,def grade_student( ):...写在后面→NameError函数未定义
在自己的平台上先补充调用代码并运行验证输出正确性;再在另一份空文件中将调用代码放在定义代码之前故意触发NameError,观察报错信息
“先调用、后定义——NameError现场实验”。让学生刻意制造一次“先调用后定义”的错误操作,亲历程序无法识别尚未定义的函数类型并从报错中自然追溯错误的来源——以此构建本课第一大难点“定义与调用必须按序排列,程序运行自上而下先找函数定义”的深刻印象 在自己的编程平台上跟做倒计数演示代码,重点观察条件表达式的布尔值切换时刻和计数递减过程的对应关系。同时跟随课件观察流程图
内置函数与自定义函数关系辨析
快速补充一组定义-调用关系的辨析对比——内置函数(无需自定义,Python环境启动时已自动加载,如print( )和len( ));自定义函数(需先def定义才能调用,如本节课写的所有函数)。引导学生回忆第4单元直接使用内置函数的经历——数学函数库中SUM能直接引用且不需要前置定义,而本节课的grade_student必须经过定义。总结:“不管是内置的还是自定义的,调用时实际上都是‘函数名()加参数’的同一套规则。”
快速回顾第4单元的经验——SUM/Average是直接拿来用的,不需要自己写def;本节课的grade_student必须先定后调
将已有的内置函数经验与自定义函数规则对照互补,消除“教材只讲一种但实际有两种”的认知模糊
任务一:定义与调用诊断单——“诊一诊”
诊断任务发布 发放任务书中的“定义与调用代码诊断单”,布置诊断任务:“请各小组完成两组快速诊断——①函数语法报错诊断:逐行判断6段代码是否存在语法错误。2段合法定义、1段return位置在函数外部、1段缺少缩进、1段函数名包含空格、1段忘记最后的冒号。对每个错误行用红色圈画并简单标注错误类型;②定义 vs 调用执行顺序诊断:桌面上有一个混乱的代码片段——次序完全打乱但语法全都合法。请将各段按Python执行顺序重新排列后写出。完成后举手出示最终诊断结果。”巡视各组诊断情况
小组分工诊断6段代码,圈画错误行并标注错误类型(缩进/冒号/语法保留字);重新排列乱序代码段后对照正确答案
“定义与调用诊断单”。将函数定义语法的五大常见错误(冒号遗漏、缩进缺失、return在函数体外部、函数名含空格、误用等号替代赋值)和定义与调用的正确执行顺序打包为一份结构化的诊断训练——学生在诊断中逐一接触多种错误类型,为自主定义函数时同步规避常见错误建立第一道防线
任务二:框架支撑式函数定义——“写一写”
f函数定义实战任务发布 发放任务书中的“函数定义实战任务单”,布置框架支撑式编码任务:“请各小组在任务书提供的def ___(___)①: ____② return ___③函数骨架基础上,填写关键逻辑完成函数的完整编写——①将分级判断逻辑封装成一个名为grade_student(hours)的函数,接受一个时长参数hours,返回该学生的使用等级(建议先复制5.2.1 V3程序中的if-elif-else逻辑);②定义完毕后运行函数——调用grade_student(1.5)验证是否能正确返回‘优秀自律’;③再定义第二个函数print_report(list)——接受一个学生时长列表作为参数,用for循环遍历列表中的每一条数据并逐行打印分级结果。完成后实测调用print_report([2.5, 4.8, 6.1])检查输出顺序和对应评级是否正确。”巡视各组完成情况和语法正确性
小组分工:一人按照骨架封装grade_student函数,一人封装print_report函数并验证输出结果与5.2.2原程序一致性,一人负责检查两函数的注释和缩进。完成后交叉核对结果
“框架支撑式函数编写”。对于初次编写函数的学生,完全空白的编辑器往往带来卡顿和畏难。提供“def骨架”模板——保留def ___(___)①: ____② return ___③——让学生在学生消化了判断逻辑的基础上聚焦于函数的核心逻辑填充,不因粗心漏掉一个冒号或少一个括号而无法抵达终点
成果展示
选取2—3个小组代表上台投屏展示:①完整函数系统封装代码(含四个函数的完整代码和主程序调用链);②变量作用域追踪表的完整实验数据和辨析结论;③“手动编写函数—AI生成函数 双模对比”记录表的三个维度评分和核心结论;④函数封装前后(散装版 vs 函数封装版)行数对比和评级验证一致性
小组代表展示并讲解,其他小组认真倾听并在评价表中记录关键对比数据
锻炼表达与展示能力,促进组间经验交流和知识互补
多元评价
组织自评、互评,教师进行点评总结。重点评价:①函数定义语法是否正确(def关键字、函数名规范性、缩进层级清晰、return语句完整性);②函数之间调用关系和数据流转是否合理(输入输出的流向顺序明确、各函数的数据参数匹配);③变量作用域分析是否准确(追踪表中的变量取值和作用域类型判别);④“手动与AI双模对比”分析的客观性与深度(既有优点的客观评分也有局限性的独立反思)。表扬封装规范、调用链清晰、对比分析客观且有独立见解的小组,纠正班级共性问题——“return写在了if分支内部导致部分分支无返回值”“函数名中混用中文字符”“参数位置放错导致调用时报类型不匹配”等
进行自我评价和小组互评,填写评价记录
构建多维评价体系
知识梳理
带领学生回顾本课核心知识框架:“函数三要素——①定义函数(def 函数名(参数): → 函数体 → return 返回值);②调用函数(函数名(实参)——先定义后调用,调用时跳转执行,执行完返回);③参数与返回值(参数是函数的入口通道→return是函数的出口通道——内部的计算结果通过返回值传递给调用方)。核心语法纪律——def行末尾加冒号,函数体缩进一层,return在所有可能的执行路径上都应可达,参数位置参数在前、默认参数在后。”梳理5.2节三条任务的递进关系——使用选择结构(数据怎么判断筛选)→使用循环结构(数据怎么批量处理)→使用函数(程序怎么模块化封装),三者共同构成从基础语法到结构化设计的完整程序设计能力链,为5.3运用典型算法奠定模块化设计基础。”用一句话总结核心理解:“函数是程序的积木——把一段散开的代码变成一个可被其他代码调用的固定组件。一个程序就像一个系统,函数就是每个子模块——每个子模块各司一职、相互协作,最终完成一项完整的功能。”
跟随教师梳理知识框架,完善任务书笔记
构建系统化知识结构,完成5.2节三课时的完整程序设计能力链闭环
板书设计
板书设计:5.2.3 使用函数
一、函数——“封装一段代码,起一个名字”
· 概念:功能封装、逻辑复用、避免重复
· 三要素:输入(参数)→ 内部处理(函数体)→ 输出(return返回值)
· 定义:def 函数名(参数): 函数体 return 返回值
· 调用:函数名(实参) ——必须先定义后调用(NameError实验验证)
二、参数与返回值——数据进出函数的通道
· 形参(定义时) vs 实参(调用时)→ 按位置顺序对应映射
· 默认参数值放位置参数之后
·print( ) ≠ return → print显示在屏幕但结果不储存在变量里;return将结果交还给调用代码
三、变量作用域——“函数内外,同名不互通”
· 全局变量:全程序可读
· 局部变量:仅函数内部可使用,外部无法访问
四、函数设计原则——“一个好函数只做好一件事”
· 单一职责原则 → 函数名=岗位职责;准确命名、注释清晰
· 完整功能=多个函数的协作体(调用链:main( )→grade_student( )→print_report( ))
教学反思
(课后填写)
· 教学目标达成度分析
· 学生对信息技术发展历程的理解情况
· 小组讨论环节的参与度和效果
· 课程思政融入的自然度
· 改进措施与建议
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$