师:同学们,今天我们来学习高一年级教科版信息技术第二单元第三节周而复始的循环,第二课时的内容。
在前面的课程中,我们知道程序中的循环指计算机程序中某些代码的反复执行。对于循环重复次数一定的问题,可以使用计数循环for语句解决。然而,现实生活中有些问题事先并不能确定重复的次数,今天我们就来学习如何编写程序解决这一类问题。
现在很多人都在银行购买理财产品,有一位投资者购买了10万元一年期、收益率3.7%的银行保证收益型理财产品,每年理财赎回后会提取2万元用作生活所需,余下资金仍购买此种理财。在收益率不变的情况下,多少年后资金会被全部取出?同学们,让我们一起来编写程序,帮这位投资者找到答案。
按照计算机解决问题的一般过程,我们先来分析问题的解决方法。设变量Mali表示理财账户当前的资金数量,初始状态是存入本金10万元,将10万放入Mali中。一年期收益率是3.7%,那么一年后的本金和收益一共为Mali乘以(1 + 0.037)的和再减去取出的2万,得到一年后剩下的资金,也就是再购买理财的资金,把它付给Mali,更新理财账户当前的资金数量。注意这里左右两边Mali值的变化,右边表达式中的Mali是初始状态的值,表达式的结果再赋给Mali,这时Mali的值更新为一年后理财账户的资金数量。
同样的方法,再用一年后的Mali值计算出两年后理财账户的资金数量。由此可以看出,只要重复执行这条语句,就可以计算连续若干年后的资金余额。那么要重复执行到什么时候停止呢?大家来想一想,我们购买理财产品前,首先要保证理财账户里有一定的资金,也就是要满足Mali大于0。如果重复到第i年后不满足Mali大于0,说明第i年资金被全部取出,下一年不能再继续购买理财产品,停止重复。
由此可见,只要在Mali大于0的情况下重复执行这条语句,一直到Mali不大于0时停止,这时重复的次数就是资金被全部取出时的年数。
分析出问题的解决方法,接下来我们根据解决方法设计程序的算法。程序开始后,先给Mali赋初始值为10万,问题要求的是理财的年数,设变量year记录年份,初始值为0。开始购买理财前先判断是否购买,满足条件Mali大于0,如果满足,就执行这条赋值语句,更新Mali的值,再将year的值增加1。这种将year加1再赋给year的形式,使year的值每循环一次增加1,可以起到计数的作用。然后再返回判断当前的Mali是否满足大于0,如果满足就重复刚才的操作,一直到不满足条件Mali大于0,结束重复操作,输出变量year的值。
观察流程图,我们发现在满足Mali大于0这个分支形成了一个循环。这个循环在程序中如何实现呢?我们前面学习了for循环语句,for语句是计数循环,需要先确定循环次数。这个问题中循环次数是多少,循环是由Mali大于0这个条件是否成立来决定的,循环多少次使Mali小于0无法确定,因此使用for语句不容易实现。要实现这个问题中的循环,我们要学习一种新的循环控制方式——条件循环。条件循环是根据确定的条件控制循环,当循环条件成立时才执行循环体。在Python语言中,条件循环使用while语句实现。
while语句的基本格式是:关键字while后写上关系表达式表示的循环条件,注意,关系表达式后是英文的冒号,这里的冒号一定不能漏掉。下面的语句或语句组,也就是要重复执行的操作语句,称为循环体。请大家注意,循环体语句所在的行必须要与while所在的行留有缩进。
while语句的执行过程用流程图表示,就是先判断关系表达式是否成立,如果成立就执行循环体,然后再判断关系表达式是否成立,如果成立再执行循环体,不断重复这个过程,直到关系表达式不成立,结束循环。
在使用while语句实现循环结构时,必须确定两个要素。第一是要确定执行循环的条件,也就是语句中的关系表达式;第二是要确定循环体,也就是要重复执行的操作。
我们来通过一段程序体验while语句的执行过程。请同学们根据对while语句的理解,先自己分析一下程序的执行结果。
(运行程序展示结果)来看一下在Python编译环境中运行程序的结果,和你分析的结果一样吗?我们来分析一下这段程序,先给s赋初值0,while语句的循环条件是s小于等于30。在循环语句前要先给s赋初值,否则s的值不确定,循环条件也就无法得到确定的结果。所以大家要注意,进入循环前要对循环变量赋初值。
