1、教科版2019信息技术必修1数据与计算第2单元编程计算2.3周而复始的循环教学设计【教材分析】循环结构通常包含两种类型:重复一定次数的计数循环;重复直到某种情况结束的条件循环。在Python中使用for语句来创建计数循环。教材介绍了for循环的基本格式、循环体、循环次数的控制等。由于Python中for循环次数和列表有密切联系,因此在本节引入了列表,并介绍了列表常见的操作如:创建、添加、赋值、删除和输出等。在Python中使用while语句来创建条件循环。教材中介绍了while循环的基本格式、循环体、循环条件的设置等。由于条件循环的条件设置容易出错,因此可以借助流程图对循环执行的原理进行分析。
2、调试程序是编程中不可缺少的环节,但难度不大,教材以while循环的活动为例,一方面可以帮助理解条件循环的执行原理,另一方面介绍了调试的方法。【教学建议】本节我们将围绕“学习投资理财”项目展开学习。本项目主要包含“计算5年储蓄存款收益”和“计算理财产品收益”两个任务。“计算5年储蓄存款收益”任务主要了解循环的作用,理解循环结构的执行原理,掌握计数循环的使用方法;“计算理财产品收益”则侧重掌握条件循环的使用方法,感受循环对计算效率的提高。任务一的活动“计算利率不变情况下的到期存款总额”,是下一活动的铺垫,它无需用到循环语句,用解析法可以直接给出答案。考虑到程序的复杂度,该活动没有考虑四舍五入的问题
3、。活动可以让学生自己探索,既是对前面内容的复习,也是引入下一活动的过渡。活动2在活动1的基础上利率发生了变化,直接使用解析法不够方便。因此在这个活动中教师更关键的是引导学生对循环体的提炼,总结出“n年的存款总额= n-1年存款总额 *(1+第n年利率)”。在计数循环中还会用到列表,这也是Python语言和以往程序语言教学差异较大的一个知识点,而且列表本身非常灵活,教师要通过实例让学生了解它的常见操作。尤其在列表用于计数循环时range的范围确定。本活动是循环结构的开始,知识点较多,难度较大,教师适当补充练习,巩固所学。任务二只有一个活动“计算理财产品收益”。因为有任务一的基础,因此学生提炼循环
4、体“money=round(money*(1+0.037),2)-20000”没有太大难度。这时教师可以创设认知冲突,让学生感受到在循环次数无法确定的情况下计数循环不可用,从而激发学生学习新知识的欲望。条件循环相较于计数循环更加复杂,因此建议教师在课堂教学的时候可以使用流程图来分析循环语句的执行原理,让学生通过流程图更深刻地理解条件循环的格式、功能和条件设置。【学习目标】1、了解循环的基本结构。2、学会计数循环的使用方法。3、学会条件循环的使用方法。4、熟练使用循环解决实际问题。for 循环的工作原理。【教学重点、难点】循环的基本结构。计数循环的使用方法。条件循环的使用方法。使用循环解决实际问
5、题。【教学过程】一、 引入对人来说,长时间重复做同- -件事情,通常会觉得不愉快,且效率会有所下降。但计算机往往不知疲倦,非常适宜用重复的方式完成任务。我们将计算机程序中某些代码的反复执行称为循环。Python中既有重复一定次数的计数循环,也有重复到某种情况结束的条件循环。随着“理财时代”的到来,“你不理财,财不理你”成为人们的一句口头禅。我国金融市场日益繁荣,为个人投资者提供的投资理财产品和渠道越来越多,如储蓄存款、股票、债券、保险等。因此,理财规划的重要性日益凸显。本节我们将围绕“学习投资理财”项目展开学习,通过该项目活动,了解循环的作用,学习如何根据问题的需要选择恰当的循环类型,如何准确
6、设置循环条件和编写循环语句块。本项目主要包含“计算5年储蓄存款收益”和“计算理财产品收益”两个任务。任务一 计算5年储蓄存款收益活动1计算利率不变情况 下的到期存款总额如果将5万元存入银行,选择“1年定期、自动转存”的存款方式,假设5年内存款利率没有发生变化,均为3.25%,5年后到期存款总额是多少?在程序中,暂不考虑存款分位以下的四舍五入。活动2计算利率变动情况下的到期存款总额如果首次存款时的利率是3.25%,自动转存时利率分别是3%、3%、2%、1.75%, 那么5年后到期存款总额是多少?由于每年的利率不同,如果都存储在变量中,那么需要5个变量,这时可以借助列表来实现。二、 列表列表在Py
7、thon中的作用非常强大,它可以包含多个数据元素,同时它是一个有序的集合。下面通过一个简单的例子来熟悉列表的使用方法。#创建列表,各元索用逗号隔开,放在方括号内#列表可以存储混合类型的数据object=石榴,1,香蕉,橙子”,梨子#修改列表第1个元素的值,注意列表索引号从0开始object0=苹果delobject1#删除列表第2个元素#在列表尾部添加一-个数据元素”猕猴桃object.append(猕猴桃)print(object)#输出列表运行结果:苹果,香蕉,橙子,梨子,、猕猴桃列表相关知识建立列表:list=You, are, why增加元素在列表末尾:list.append(frie
8、nd)插入元素:list.insert(2, my)删除元素:list.remove(why)列表逆序:list.reverse()获取元素:list索引号,如list0为You。打印列表:print list列表排序:list.sort()三、 计数循环 循环重复次数一-定时,我们通常称为计数循环。在Python中,使用for语句来创建这类循环。for语句的基本格式如下。for循环变量in列表:语句或语句组例子该例子通过for语句输出列表中的每个元素。foriinhello,world:print(i) #循环体运行结果:helloworld 通常我们将一组重复执行的语句称为循环体。Pyth
9、on对循环体约定的格式是,循环体必须相对关键词for有缩进。在本例中,循环体只有一条语句,即print(i)。循环执行时,依次将列表中的元素赋给i,并且执行循环体(输出i的值),直到整个列表的元素被取完,循环结束。 在for语句中,in后也可以是range()函数,它可以生成某个范围内的数字列表。例如:range(1,6)就会生成1,2,3,4,5这样一个列表,而range(8)会生成0,1,2,3,4,5,6,7这样一个列表。下面这个循环可以输出0到100的自然数。foriinrange(101): #想想为什么是101print(1) 根据前面分析得出的规律,可以使用计数循环来实现每年存款
10、总额的重复计算。循环的次数即为存款的年限。因为银行支付利息计至分位,分位以下四舍五入,所以可以调用round()函数实现保留两位小数。例如,round(1.428,2)的运算结果为1.43。遵循for语句的格式,完善下列程序代码,实现存款总额的计算。money= #本金50000元rate= #利率列表for #计算每年存款总额print(5年以后存款总额:“,money,元) #输出结果 很多银行人民币理财产品的收益高于同期定期存款,但是高收益往往伴随高风险,因此很多普通投资者会选择收益相对稳定、风险较低的保证收益型理财产品。任务二计算理财产品收益某投资者购买了10万元一年期收益率3.7%的
11、銀行保证收益型理财产品。每年理财赎回后,他会提取2万元用作生活所需,余下资金仍购买此种理财。在收益率不变的情况下,多少年后本金被全部取出?理财一年到期赎回,投资者取出2万元。即money-round(money*(1+0.037),2)-20000。重复执行该语句,就可以计算连续若千年后的资金余额。但投资多少年是未知的,即循环的次数无法确定,因此使用计数循环不太合适。这时可以考虑使用条件循环来解决该问题。四、条件循环 条件循环一般用于循环次数未知的情况。只有当循环条件成立时,才执行循环体。在Python中,使用while语句来创建这类循环。while语句的基本格式如下。while关系表达式:语
12、句或语句组例如:s=0whileS=30:5=5+10#循环体print(s) #循环体运行结果:0203010 在本例中,循环体是两条语句,因此这两条语句相对于关键词while均要缩进。程序执行过程是:变量s初值为0,判断“s=30是否成立;如果成立则执行循环体( s值增加10,输出s的值),不断重复直到“s d:理财.py(4)()- while money=0:(Pdb) P money ,year(83700.0, 1)(Pdb) C d:理财. py(4)()- while money=0:(Pdb) p money,year(66796.9, 2)(Pdb) q六、拓展练习1.在任
13、务二中,投资人投入多少钱可以恰好在第10年取完最后- -次2万元?2.某一年期理财产品实际收益率为4.25%,由于产品一直在持续运作,投资者不按时赎回视为自动再投资。在收益率不变的情况下,至少多少年后投资可以翻倍?2.运行程序,反复要求输入验证码,直到输入为888为止。参考答案:pwd=0while pwd!=888: pwd=input(请输入正确的验证码:)3.某1年期理财产品实际收益率为4.25%,由于产品一直在持续运作,投资者不按时赎回视为自动再投资。在收益率不变的情况下,至少多少年后投资可以翻倍?参考答案:money=100000year=0while money200000: mo
14、ney=round(money*(1+0.0425),2) year=year+1print(year,年后资金翻倍)4.百变符号活动:输出图形活动描述:在屏幕输出如下图形。直角三角形等腰三角形菱形 参考代码:直角三角形for i in range(5): print(*(i+1)等腰三角形for i in range(5): print( *(5-i),*(2*i+1)菱形for i in range(5): print( *(5-i),*(2*i+1)for i in range(4): print( *(2+i),*(7-2*i)练习题1. 求1+22+32+1002的结果total=0for i in range(1,101): total=total+i*iprint(total)input(运行完毕,请按回车键退出.)2. 输入若干个正整数,以0结束,输出这若干个数中的最大数。num=int(input(请输入正整数,以0结束:)total=0while num!=0: total=total+num num=int(input(请输入正整数,以0结束:)print(total)input(运行完毕,请按回车键退出.)【教学反思】