第三单元 项目八第二课时 用模块化设计批量计算平均气温(共40张PPT)+教案

文档属性

名称 第三单元 项目八第二课时 用模块化设计批量计算平均气温(共40张PPT)+教案
格式 zip
文件大小 3.8MB
资源类型 试卷
版本资源 沪教版(2019)
科目 信息技术(信息科技)
更新时间 2020-10-13 16:26:31

文档简介

中小学教育资源及组卷应用平台
项目八
分析历史气温数据
———设计批量数据算法
第二课时
用模块化设计批量计算平均气温
■教材分析
“用模块化设计批量计算平均气温”这一小节,通过处理批量气象数据引导学生学习列表的嵌套和批量处理数据的方法;通过在批量数据中引入“模块化”概念,引导学生探究解决该问题的程序模块图和函数实现。
■教学目标
1、知识和技能
(1)理解“模块化”概念。
(2)引导学生探究解决该问题的程序模块图和函数实现。
2、过程与方法
通过处理批量气象数据引导学生学习列表的嵌套和批量处理数据的方法。
3、情感态度与价值观
(1)体验程序设计和内涵及魅力,产生对程序设计的求知欲,形成积极主动地学习态度;
(2)通过批量处理数据,帮助学生克服设计数据算法的畏难情绪,培养他们严谨、缜密、科学的程序设计作风。
■教学重点:
(1)理解“模块化”概念。
(2)解决该问题的程序模块图和函数实现。
■教学难点:
函数的实现。
■教学准备
计算机教室,Python,投影机。
■教学过程:
一.“自顶向下、逐步求精”的程序设计方法
本项目在解决“批量计算12个月的月平均气温”问题时,先进行顶层设计,再对各部分进行细化。这种程序设计方法使程序的结构变得更加清晰,程序的调试也更加简单。
这种程序设计方法称为“自顶向下、逐步求精”。该方法是把整个设计过程分出层次来,逐步加以解决。每一步都是在前一步的基础上进行的,是对前一步设计的细化和具体化。这好比画一幅画,先整体规划,确定这幅画由哪些内容组成,勾勒出大致的轮廓,然后考虑各部分的形状是怎样的,最后进行细节润色。
许多程序从逻辑上可以分为3个阶段:输入数据并做相应调整的处理阶段、计算得到结果的阶段、显示结果并保存数据的阶段。在自顶向下的程序设计方法中,最顶层仅仅描述了程序的功能,它虽然是程序的一个完整表示,但很少提供足够的信息,不能直接用程序语句表示,因此需要进行细化处理。对每一部分进行细化,遇到不能清楚解释的步骤再向下一层延伸。依次进行第二层、第三层的细化,直至每一步都是一个基本操作为止。每次分步处理,都是算法在一个层次上的细化。
这样考虑问题,思路比较清晰,有条不紊,而且把一个大问题分解为若干个小问题考虑,既降低了问题的复杂性,也便于程序实现。
二、模块化设计的思想
大多数解决现实问题的程序都比本书中介绍的程序要大得多,对于一个复杂的问题通常需采取“分而治之”的策略,也就是模块化设计的思想。运用软件工程的思想来组织软件开发工作,一般要经历需求分析、设计程序、编写程序等阶段。需求分析所做的事情是根据用户的要求确定程序应当具备哪些功能,达到什么性。设计程序阶段大致又可再分为两个子阶段,即程序的模块化设计和模块内的逻辑设计。在模块化设计中,要按照需求分析把程序分割成许多模块,建立以模块为单位的多层次结构体系,各个模块之间形成调用关系。模块化之后还要确定每一模块内的具体算法,并准确表达这些算法。整个程序设计完成之后,就可以使用特定的程序设计语言来编写程序。
一个程序的算法设计可以从三个基本步骤——“输入”“处理”“输出”开始,形成顶层模块,再对每一个模块继续向下细化,直至每一个模块都相对独立地完成一个基本功能例如,下图演示了一个工资处理程序的模块化设计的过程。
三、常见算法——枚举法
枚举法在生活中非常普遍,是处理问题最常用的算法思想之一。枚举法的基本原理是根据已知条件,在给定的范围内对所有可能的答案按某种顺序进行逐一枚举和检验,从中找出那些符合要求的答案。在日常生活中,人们在解决问题时,如果需要枚举的范围比较小,采用枚举法会显得比较直观、合理;但当枚举范围比较大时,则会十分繁琐、容易出错然而,对于计算机来说,它的高速运算能力保证了枚举法的可行性,而且实现相对简单。
枚举法的一般模式可以总结如下:
·确定范围:问题所涉及的情况有哪些,情况的种数是否可以确定。
·验证条件:分析出来的这些情况,须满足什么条件才能成为问题的答案。
·尽可能缩小搜索范围,减少求解时间。
例如,用枚举法解决以下问题:有一张由5位数构成的单据号码,其千位和百位上的数字模糊不清了,已知这个数能被57或67整除,请使用计算机求这张单据号码。
1.问题分析
假设这个5位数为abcde,则abcde=ax10000+bx1000+cx100+dx10+e。本问题中,已知万位、十位、个位上的数字a、d、e(可以由用户输入),而千位和百位上的数字b、c是待求的,因此可采用枚举法列举b、c所有可能的数字(0-9),每列举一次,判断构造的号码能否被57或67整除,若能则输出该号码。
2.设计算法
四、用模块化设计批量计算平均气温
问题:已知某地2013年365天的日平均气温数据(已按一月一行的形式存放在“2013avgtq.csv”文件中,下图显示了前两个月的数据),批量计算该地2013年12个月的月平均气温。
核心概念:
两个物体有装配关系时,将一个物体嵌入另一物体,这种方法叫做嵌套。嵌套的思想在计算机程序设计中应用广泛。典型的嵌套包括嵌套控制结构和嵌套数据结构。
1.分析问题
依次计算各个月的月平均气温,即得到月平均气温的序列。解决本问题的关键在于如何组织每个月的日平均气温数据,不同的数据组织所对应的算法设计也不同。

Python语言中,可利用嵌套列表组织以上数据:将每个月的日平均气温构成的列表作为一个列表的数据项——子列表,构成嵌套的列表,其形式如下:
[
[
],[
],[
],[
]……]
使用下标可以方便地访问嵌套列表中的每一个子列表。

Python语言中使用下列语句块,可以从“2013avgtq.csv”文件中逐月读取日平均气温数据,把它们转化为整型数据,并以子列表形式存储在嵌套列表yL中。该嵌套列表中包含12个子列表,一个子列表就是一个月的日平均气温序列。
Python语言对文件采用统一的操作步骤,即“打开--操作--关闭”。open函数用来打开文件(默认用只读方式打开),并返回文件对象。
for
line
in
f是逐行访问文件对象f,line表示一行字符串。line.
replace("\n","")是将每一行结束处的换行符"\n"用空串替代,相当于删除换行符。Line.split(",")是按照逗号将line字符串切割为若干个字符串,返回一个列表。yL.append(L)是将列表L追加到列表yL中,作为一个数据项。
close函数用来关闭文件。
2.设计算法
“自顶向下、逐步求精”的设计方法:选进行顶层算法设计,再对各组成部分进行细化。
批量计算一年中12个月的月平均气温,可以使用“自顶向下、逐步求精”的方法来设计算法。
上述算法的顶层程序模块图如下图所示。
图顶层程序模块图
顶层算法中的三步,并不能直接对应一条明确的程序语句,还需要进行细化设计,将顶层算法模块化,每一步为一个独立的功能模块。
(1)设计模块1的算法创建日平均气温列表
小贴士
算法步骤1.3是一个循环结构,1.3.2也是一个循环结构,在循环结构中出现了另一个循环结构,这称为循环的嵌套结构,也称多重循环。
(2)设计模块2的算法——计算12个月的月平均气温
嵌套列表dL中包含12个子列表,每个子列表是一个月的日平均气温序列。对每个子列表求平均值,结果存放在列表avgy中。
类似的,还须完成模块3的算法设计——输出12个月的月平均气温,其具体设计方法与对屏幕显示的要求相关。
思考与讨论
如何设计一个一年中12个月的月平均气温数据的输出样式?算法如何设计?
3.函数实现
模块化设计中的子模块既可以用函数实现,也可以直接用程序块实现。下面以模块1创建日平均气温列表为例,完成其函数实现。

Python
Shell
中编写并测试函数
readNList,该函数功能为从参数中获取指定文件名,读入文件数据到列表,处理后得到包含12个月的日平均气温子列表的新列表,并返回新列表。
(1)分析函数
本问题所涉及的数据对象包括函数的输入参数(文件名filename)、存放日平均气温数据的嵌套列表dL、文件对象f。
函数的计算结果是包含12个月的日平均气温子列表的新列表,通过retum语句返回。
(2)定义函数
参照模块1的算法设计,在
Python
Shell中定义函数readNList。
(3)调用函数
调用
readNList,获取一年的日平均气温数据列表tqy,并显示tqy。
类似的,模块2与模块3也可以用函数实现。
思考与讨论
以下函数调用中,存储文件名的变量为file,与函数定义时输入参数的名称
filename不一致。这种函数调用正确吗?为什么?
五、课后作业
编写程序,利用文件“2013avgtq.csv”中的
2013
年的日平均气温数据,分别计算12
个月的月平均气温,按格式显示在屏幕上。(见P115页)
1.输入a、d、e;
2.循环b从0到9,
step1;
2.1
循环c从0到9,step1;
2.1.1
number=ax1000+bx100+cx100+dx10+e;
2.1.2
如果
number能被57或67整除,则输出
number。
f=open("c:\\sample\\2013avgtq.csv")
yL=[]
for
line
in
f
line=line.replace("\n","")
L=line.split(",")
for
i
in
range(len(L)):
L[i]=int(L[i])
yL.append(L)
f.close
()
1.创建日平均气温列表;
2.计算12个月的月平均气温;
3.输出12个月的月平均气温。
批量计算一年
中12个月的
月平均气温
1.创建日平均气温列表
2.计算12个月的月平均气温
3.输出12个月的月平均气温
第1步算法细化
1.1打开文件对象f;
1.2初始化新列表dL;
1.3逐行读入文件数据,将一行字符
串切割,转化为整型数据后,作为子
列表追加到列表d中;
1.4关闭文件。
第1.3步算法细化
1.3.1
按逗号切割字符串line中的数据到列表L;
1.3.2
循环i从0到len(L)-1;
1.3.2.1
将L[i]转化为整数;
1.3.3
将L追加到列表dL中。
第2步算法细化
2.1
初始化avgy;
2.2
迭代访问dL中每一个子列表m;
2.2.1
列表m的平均值avg;
2.2.2
将avg追加到列表avgy中。
>>>
def
readNList(filename):
f=open(filename)
dL=[]
for
line
in
f:
line=line.replace("\n",
"")
L=line
split(",")
for
i
in
range(len(L)):
L[i]=int(L[i])
dL.append(L)
f.close()
return
dL
>>>
filename=input("请输入csv文件名:")
请输入csv文件名:c:\sanple\2013avgtq.csv
>>>
tqy=readNList(filename)
>>>
tqy
>>>
file="c:
\\sample\\2013avgtq.csv"
>>>
tqy=readNList(file)
>>>
tqy
21世纪教育网
www.21cnjy.com
精品试卷·第
2

(共
2
页)
HYPERLINK
"http://21世纪教育网(www.21cnjy.com)
"
21世纪教育网(www.21cnjy.com)(共40张PPT)
第二课时
用模块化设计批量计算平均气温
信息技术沪教版
必修1
项目八
分析历史气温数据
——设计批量数据算法
目录
“自顶向下、逐步求精”的程序设计方法
模块化设计的思想
常见算法——枚举法
用模块化设计批量计算平均气温
一、“自顶向下、逐步求精”的程序设计方法
“自顶向下、逐步求精”
先进行顶层设计,再对各部分进行细化。这种程序设计方法使程序的结构变得更加清晰,程序的调试也更加简单。
输入数据并做相应调整的处理
第一阶段
计算得到结果
第二阶段
显示结果并保存数据
第三阶段
二、模块化设计的思想
模块化设计的思想
大多数解决现实问题的程序都比本书中介绍的程序要大得多,对于一个复杂的问题通常需采取“分而治之”的策略,也就是模块化设计的思想。
整个程序设计完成之后,就可以使用特定的程序设计语言来编写程序。
编写程序
需求分析所做的事情是根据用户的要求确定程序应当具备哪些功能,达到什么性。
需求分析
设计程序阶段大致又可再分为两个子阶段,即程序的模块化设计和模块内的逻辑设计。
设计程序
03
输出
02
处理
一个程序的算法设计可以从三个基本步骤
01
输入
三、常见算法——枚举法
枚举法
枚举法的基本原理是根据已知条件,在给定的范围内对所有可能的答案按某种顺序进行逐一枚举和检验,从中找出那些符合要求的答案。
确定范围
验证条件
搜索范围
问题所涉及的情况有哪些,情况的种数是否可以确定。
尽可能缩小搜索范围,减少求解时间。
枚举法的一般模式
分析出来的这些情况,须满足什么条件才能成为问题的答案。
用枚举法解决以下问题:
有一张由5位数构成的单据号码,其千位和百位上的数字模糊不清了,已知这个数能被57或67整除,请使用计算机求这张单据号码。
假设这个5位数为abcde,则abcde=ax10000+bx1000+cx100+dx10+e。本问题中,已知万位、十位、个位上的数字a、d、e(可以由用户输入),而千位和百位上的数字b、c是待求的,因此可采用枚举法列举b、c所有可能的数字(0-9),每列举一次,判断构造的号码能否被57或67整除,若能则输出该号码。
1.问题分析
2.设计算法
1.输入a、d、e;
 2.循环b从0到9,
step1;
   2.1
循环c从0到9,step1;
     2.1.1
number=ax1000+bx100+cx100+dx10+e;
     2.1.2
如果
number能被57或67整除,则输出
number。
四、用模块化设计批量计算平均气温
两个物体有装配关系时,将一个物体嵌入另一物体,这种方法叫做嵌套。嵌套的思想在计算机程序设计中应用广泛。典型的嵌套包括嵌套控制结构和嵌套数据结构。
嵌套
  已知某地2013年365天的日平均气温数据(已按一月一行的形式存放在“2013avgtq.csv”文件中,下图显示了前两个月的数据),批量计算该地2013年12个月的月平均气温。
0
2


Python语言中,可利用嵌套列表组织以上数据:将每个月的日平均气温构成的列表作为一个列表的数据项——子列表,构成嵌套的列表,其形式如下:
[
[
],[
],[
],[
]……]
使用下标可以方便地访问嵌套列表中的每一个子列表。

分析问题
0
2


分析问题
f=open("c:\\sample\\2013avgtq.csv")
yL=[]
for
line
in
f
line=line.replace("\n","")
L=line.split(",")
for
i
in
range(len(L)):
L[i]=int(L[i])
yL.append(L)
f.close
()
0
2

Python语言对文件采用统一的操作步骤,即“打开--操作--关闭”。
open函数用来打开文件(默认用只读方式打开),并返回文件对象。
for
line
in
f是逐行访问文件对象f。
line表示一行字符串。

分析问题
0
2

line.
replace("\n","")是将每一行结束处的换行符"\n"用空串替代,相当于删除换行符。
Line.split(",")是按照逗号将line字符串切割为若干个字符串,返回一个列表。
yL.append(L)是将列表L追加到列表yL中,作为一个数据项。
close函数用来关闭文件。

分析问题
0
2

“自顶向下、逐步求精”的设计方法:选进行顶层算法设计,再对各组成部分进行细化。
批量计算一年中12个月的月平均气温,可以使用“自顶向下、逐步求精”的方法来设计算法。

设计算法
0
2


设计算法
1.创建日平均气温列表;
2.计算12个月的月平均气温;
3.输出12个月的月平均气温。
0
2


设计算法
0
2


设计算法
(1)设计模块1的算法创建日平均气温列表
第1步算法细化
1.1打开文件对象f;
1.2初始化新列表dL;
1.3逐行读入文件数据,将一行字符
串切割,转化为整型数据后,作为子
列表追加到列表d中;
1.4关闭文件。
0
2


设计算法
算法步骤1.3是一个循环结构,1.3.2也是一个循环结构,在循环结构中出现了另一个循环结构,这称为循环的嵌套结构,也称多重循环。
第1.3步算法细化
1.3.1
按逗号切割字符串line中的数据到列表L;
1.3.2
循环i从0到len(L)-1;
1.3.2.1
将L[i]转化为整数;
1.3.3
将L追加到列表dL中。
0
2


设计算法
(2)设计模块2的算法——计算12个月的月平均气温
第2步算法细化
2.1
初始化avgy;
2.2
迭代访问dL中每一个子列表m;
2.2.1
列表m的平均值avg;
2.2.2
将avg追加到列表avgy中。
0
2

模块化设计中的子模块既可以用函数实现,也可以直接用程序块实现。下面以模块1创建日平均气温列表为例,完成其函数实现。

函数实现
0
2


Python
Shell
中编写并测试函数
readNList,该函数功能为从参数中获取指定文件名,读入文件数据到列表,处理后得到包含12个月的日平均气温子列表的新列表,并返回新列表。

函数实现
0
2

本问题所涉及的数据对象包括函数的输入参数(文件名filename)、存放日平均气温
数据的嵌套列表dL、文件对象f。
函数的计算结果是包含12个月的日平均气温子列表的新列表,通过retum语句返回。

函数实现
(1)分析函数
0
2


函数实现
(2)定义函数
>>>
def
readNList(filename):
f=open(filename)
dL=[]
for
line
in
f:
line=line.replace("\n",
"")
L=line
split(",")
for
i
in
range(len(L)):
L[i]=int(L[i])
dL.append(L)
f.close()
return
dL
0
2


函数实现
(3)调用函数
>>>
filename=input("请输入csv文件名:")
请输入csv文件名:c:\sanple\2013avgtq.csv
>>>
tqy=readNList(filename)
>>>
tqy
思考与讨论
以下函数调用中,存储文件名的变量为file,与函数定义时输入参数的名称
filename不一致。这种函数调用正确吗?为什么?
>>>
file="c:
\\sample\\2013avgtq.csv"
>>>
tqy=readNList(file)
>>>
tqy
五、课后作业
编写程序,利用文件“2013avgtq.csv”中的
2013
年的日平均气温数据,分别计算12
个月的月平均气温,按格式显示在屏幕上。(见P115页)
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
有大把高质量资料?一线教师?一线教研员?
欢迎加入21世纪教育网教师合作团队!!月薪过万不是梦!!
详情请看:
https://www.21cnjy.com/help/help_extract.php