高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计_第1页
高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计_第2页
高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计_第3页
高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计_第4页
高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高中信息技术必修1项目八第二课时模块化设计批量计算平均气温教学设计一、教材分析与课标定位本课选自沪科版(2019)高中信息技术必修1“数据处理与可视化表达”项目八,第二课时聚焦“用模块化设计批量计算平均气温”。依据《普通高中信息技术课程标准(2017年版2020年修订)》,本课对应“数据与计算”模块中“1.7掌握一种程序设计语言的基本知识,能使用程序设计语言实现简单算法”及“1.8针对具体任务,能采用恰当的方法与工具,对数据进行整理、分析和可视化表达”。课标强调计算思维的培养,要求学生在问题解决过程中体会抽象、分解、模块化等核心方法。本课时上承第一课时的数据采集与清洗,下启第三课时的可视化表达。本课的核心任务是将第一课时得到的多城市气温数据,通过自顶向下、逐步细化的模块化设计思想,编写Python程序实现批量计算月平均气温的功能。这一任务既是对顺序、分支、循环三大基本结构的综合运用,又是学生第一次系统接触函数定义与调用的关键课时,是学生从“会写简单程序”迈向“能设计程序结构”的转折点。二、学情分析授课对象为高中一年级学生。学生在第一课时已掌握用Pandas库读取CSV文件、处理缺失值的基本操作,具备for循环、if分支、列表与字典的基础知识。多数学生能独立写出求单城市平均气温的简单程序,但面对“多城市、多月份”的批量计算需求时,容易陷入“复制粘贴代码”的误区,缺乏从整体结构上规划程序的意识。此外,学生的抽象思维能力存在差异,对“函数”这一概念的理解容易停留在“数学函数”层面,难以迁移到程序设计中的“功能封装”上。针对上述学情,教学设计上应设置“从复制到封装”的认知冲突情境,通过对比不同写法的程序结构,引导学生自然生成模块化设计的需要,进而在实践中掌握函数定义、参数传递与返回值的使用方法。三、教学目标1.通过分析“批量计算多城市月均气温”的真实任务,能用自己的语言描述模块化设计“自顶向下、逐步细化”的基本思想。2.能依据任务需求,将整体功能分解为“读取数据”“计算单城市月均温”“计算所有城市月均温”“输出结果”四个功能模块,并用结构图表示模块间的调用关系。3.学会在Python中定义函数、调用函数,掌握参数传递和return返回值的用法,能区分形参、实参、局部变量与全局变量的作用范围。4.在调试程序的过程中,体会模块化设计对提升代码可读性与可维护性的价值,培养严谨、规范的编程习惯,养成团队协作与交流分享的意识。四、教学重难点重点:函数定义与调用的语法格式;将复杂问题分解为若干独立模块的结构化分析方法。难点:参数传递过程中实参与形参的对应关系;模块间数据传递(传入参数、返回结果)的设计思路。五、教学方法与策略本课采用“任务驱动法”为主线、“对比教学法”为支架、“小组协作学习”为组织形式。教师通过展示“复制粘贴型”代码与“模块化型”代码的对比,制造认知冲突,引导学生自主建构模块化设计的价值认知。在程序实现环节,采用“半成品补全—模仿修改—独立设计”的三级脚手架策略,兼顾不同层次学生的学习需求。课堂上利用数字化学习平台实时收集学生代码运行情况,实现精准教学反馈。六、教学过程(一)情境导入·唤醒经验(约5分钟)上课伊始,教师在大屏幕上展示一副中国地图,上面标注了北京、上海、广州、成都、哈尔滨五个城市,以及每个城市1—12月的气温数据点。教师提问:“上节课我们完成了这五个城市全年气温数据的采集和清洗。现在气象局需要我们帮忙计算每个城市的月平均气温,注意,是每个月的平均气温,不是全年平均。也就是说,我们要得到5×12共60个平均值。大家想一想,如果按照我们目前掌握的for循环知识,你打算怎么编写这个程序?”学生思考后回答,教师选取典型方案展示。大部分学生会提出的方案是:把计算一个城市一个月平均气温的代码复制60遍。教师追问:“复制60遍代码,程序能运行吗?能。但假如我们把城市扩展到全国300多个地级市,把这个月扩展到每天的数据呢?你要复制多少遍?如果气象局的统计规则从‘月均温’变成‘扣除极端温度后的月均温’,你需要修改多少处代码?”学生意识到问题的严重性后,教师顺势引出课题:“今天我们的任务,就是找到一种比‘复制粘贴’更聪明的方法,让同一段代码可以反复使用,让程序结构清晰、方便修改。这个方法,就是模块化设计。”设计意图:从真实生活情境出发,用“复制粘贴60次”的笨办法与批量处理的现实需求形成强烈对比,激发学生产生对模块化设计的内心需求,而非被动接受知识。(二)问题分解·初识模块化(约8分钟)教师引导学生将任务进行整体分析。提问:“要完成‘批量计算五个城市各月平均气温’,不急着写代码,先想一想,整个任务可以切分成哪几块?”学生分组讨论后,教师带领学生逐步梳理出以下结构图:主程序控制模块├──读取数据模块:从CSV文件中读入全部气温数据并组织为合适的结构├──计算单城市月均温模块:给定一个城市某个月的气温列表,求平均├──计算全部城市月均温模块:循环遍历每个城市和每个月,调用上面的单城市计算模块└──输出结果模块:将计算结果以表格形式打印到屏幕或写入新文件此时教师在黑板上画出树形结构图,并强调两个关键点:第一,上层模块负责“调度”,下层模块负责“具体干活”;第二,每个模块只做一件事,模块之间通过参数和返回值进行数据交流。教师进一步追问:“在刚才的结构图中,哪个模块是‘最底层’、可以被反复调用的?”学生能识别出“计算单城市月均温”模块是核心复用单元。教师总结:“这种从整体到部分、从抽象到具体的分析方式,就叫‘自顶向下,逐步细化’。模块化设计最大的好处,就是让复杂问题变简单、让重复代码变共享。”设计意图:不急于动手编程,先让学生体验“拆解问题”的过程。通过画结构图,帮助学生建立宏观的程序架构意识,为后面函数的学习打下结构性基础。(三)对比感知·从重复到封装(约10分钟)教师展示两段程序代码(用电子白板呈现):方案A:计算广州3月平均气温的代码,用变量逐个累加并除以天数,共5个城市×12个月,代码重复出现60遍(此处只展示其中两个城市两个月的碎片作为示意)。方案B:把计算“对一个列表求平均”的功能定义为函数avg_temp(monthly_list),然后每次只需调用这个函数并传入不同城市不同月份的数据列表。教师请两位学生分别上台模拟“运行”这两段代码,一位学生扮演方案A的执行者,另一位扮演方案B的执行者。教师在台下随机报“哈尔滨7月”“上海11月”等指令,方案A的执行者需要从头查找对应代码段,方案B的执行者只需要调用一次函数。模拟活动结束后,教师引导学生总结方案B的优势:1.代码量大幅减少,无需重复书写相同逻辑。2.修改方便——如果平均规则改变(比如去掉最高最低温),只需改动函数内部一处。3.可读性高——程序主结构一目了然,其他人能迅速理解主要流程。4.易于调试——哪个模块出错,单独检查该模块即可。教师板书关键词:复用、封装、参数、返回值。随即讲解Python中函数的定义格式:def函数名(形参列表):函数体return返回值教师强调:函数定义不会执行函数体中的代码,只有调用函数时才会执行。调用时传入的实参将赋值给形参。设计意图:通过角色扮演模拟两种方案,让学生在具身活动中直观感受模块化的优势。在此基础上顺势引入函数语法,使语法学习具有强烈的意义依托。(四)实践探究·实现“单城市月均温计算模块”(约12分钟)教师布置第一个上机任务:补全代码,实现“计算单城市某月平均气温”的函数。任务需求:已知函数功能是接收一个城市某个月的所有日气温数据列表,返回该月的平均气温(保留一位小数)。学生需要在Python环境中补全函数体。教师在平台中给出半成品代码:defmonth_avg(temps):temps:一个月内每日气温的数值列表请在此处补全代码,返回平均气温学生独立尝试后,教师展示参考实现:defmonth_avg(temps):s=0fortintemps:s=s+tavg=s/len(temps)returnround(avg,1)教师追问三个问题:第一问:如果temps列表中包含空值怎么办?学生回答可以用第一课时学的清洗方法在读取数据时处理,或者在此函数内加if判断跳过空值。第二问:len(temps)有什么作用?为什么不用写死天数?引导学生理解函数的通用性——无论这个月是28天还是31天,函数都能正确工作。第三问:如果我想计算“去掉一个最高温和一个最低温后的平均气温”,应该怎么改?学生发现只需要在函数内部先对列表排序,再切片即可。教师再次强调:所有修改都发生在函数内部,调用函数的其他模块不需要变更。这就是模块化带来的“隔离修改”的便利。设计意图:通过函数体的补全训练,让学生从“读代码”过渡到“写代码”。三个追问层层深入,从功能实现到健壮性再到可扩展性,逐步提升学生思维的深度。(五)合作建构·组装完整程序(约15分钟)教师布置第二个上机任务:以同桌两人为一组,将“读取数据模块”“计算单城市月均温模块”“计算全部城市月均温模块”“输出结果模块”组合为一个完整的程序,实现批量输出五个城市每个月平均气温的目标。教师提供数据文件名为city_temps.csv,结构为:第一列城市名,第二列月份,第三列气温数值,每个城市每个月有多条记录(即多日数据)。各小组开始讨论模块之间的数据接口问题。教师巡视过程中观察到的典型困难有两个:困难一:读取数据模块返回什么类型的数据?学生讨论后确定返回一个嵌套字典,格式为{城市名:{月份:[气温列表]}}。困难二:计算全部城市模块如何遍历数据?教师提示可以用双重循环,外层循环遍历城市,内层循环遍历1—12月,每轮调用month_avg函数。教师选取一组完成度较高的学生作品进行展示,代码大致如下:defread_data():data={}withopen('city_temps.csv','r',encoding='utf8')asf:lines=f.readlines()forlineinlines[1:]:city,month,temp=line.strip().split(',')temp=float(temp)ifcitynotindata:data[city]={}ifmonthnotindata[city]:data[city][month]=[]data[city][month].append(temp)returndatadefmonth_avg(temps):s=0fortintemps:s=s+tavg=s/len(temps)returnround(avg,1)defcalc_all(data):result={}forcityindata:result[city]={}formonthindata[city]:result[city][month]=month_avg(data[city][month])returnresultdefprint_result(result):print('城市,1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月')forcityinresult:line=cityforminrange(1,13):m_str=str(m)ifm_strinresult[city]:line=line+','+str(result[city][m_str])else:line=line+','print(line)defmain():d=read_data()r=calc_all(d)print_result(r)main()教师引导全班分析这段代码的结构,特别强调main函数的“调度”角色:它只负责按顺序调用三个自定义函数,每个函数完成各自单一功能。教师指出:虽然这段代码比“复制粘贴”版本的行数更多,但每一个模块都可以独立测试、独立修改。此时教师现场演示一个改动需求——“把平均气温保留一位小数改成保留两位小数”,学生发现只需修改month_avg函数中的一处round参数,其余模块完全不动。设计意图:通过小组合作完成完整程序的组装,让学生将模块化设计思想落实到完整代码中。展示和点评环节聚焦“模块间接口设计”,帮助学生理解数据如何在不同模块之间流动。(六)拓展挑战·形参与实参的深度学习(约8分钟)学生掌握基本模块化编程后,教师提出一个进阶挑战:“如果气象局要求,某些城市采用‘去极值平均法’(去掉最高和最低温后再平均),其他城市采用‘普通平均法’。如何在模块化设计中实现这个需求?请尝试修改你的calc_all函数,使它在调用month_avg时可以指定计算方式。”学生分组思考。教师引导:可以在month_avg函数中增加一个可选参数method,默认值为'normal',当method为'extreme'时执行去极值逻辑。这涉及默认参数和条件判断的嵌套使用。教师展示参考修改方案:defmonth_avg(temps,method='normal'):ifmethod=='normal':s=0fortintemps:s=s+treturnround(s/len(temps),1)elifmethod=='extreme':sorted_temps=sorted(temps)trimmed=sorted_temps[1:1]s=0fortintrimmed:s=s+treturnround(s/len(trimmed),1)教师追问:调用时如何指定方法?学生答:month_avg(temps,method='extreme')。教师继续追问:如果调用时不写第二个参数,结果是什么?学生答:使用默认值'normal',即普通平均法。教师强调:这个拓展任务展示了模块化的另一大优势——通过向函数传递不同的参数,可以灵活调整功能行为,而无需改写函数名字或调用结构。同时提醒学生注意变量的作用域问题:函数内部的变量(如s、avg)是局部变量,在函数外部不可访问;而函数通过return把计算结果传回调用处。设计意图:拓展任务将参数传递的学习推向深入,通过“计算方式可配置”的真实需求,让学生体会形参、实参、默认参数的灵活运用。同时通过局部变量与全局变量的辨析,补齐语法细节。(七)总结提升·反思沉淀(约5分钟)教师引导学生用“一图一话一代码”的方式总结本课收获。一图:画出本课的模块分解结构图。一话:用一句话概括模块化设计的核心思想。一代码:默写def函数定义与调用的基本格式。随后学生完成在线平台上的小测验(5道客观题,2分钟内完成),题目涵盖:5.函数定义的关键字是什么(def)。6.调用函数时传入的值是实参还是形参(实参)。7.函数中return的作用(返回结果并结束函数)。8.下列哪个是模块化设计的优点(代码复用、便于维护、提升可读性,多选)。9.判断:函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论