师:同学们,今天我们学习高一年级教科版信息技术第二单元第四节《可以复用的代码》第一课时。本节课我们将学习编程解决复杂问题的思想与方法,函数的定义与调用,以及使用函数解决问题。在前面三节中,我们已经了解计算机解决问题的一般过程,掌握顺序、分支和循环三种算法的基本结构,并用这些方法解决了一些比较简单的问题。本节我们将挑战一个相对复杂的问题——用火柴棒摆数字。小时候大家都玩过这个游戏,现在我们手上只有6根火柴棒,且要刚好用完,能摆出哪些自然数呢?大家好好想一想,有什么方法?

  生:(思考中)

  师:首先通过观察分析,我们会发现数字0 - 9分别需要6、2、5、5、4、5、6、3、7、6根火柴棒。如果一个自然数各数位的值所需火柴棒总和为6,那么这个数就是我们要找的自然数。如何才能一个不漏地找出所有符合条件的自然数呢?我们可以运用计算机编程的枚举法,从零开始逐一判断。那什么时候结束呢?我们需要预设查找的范围,大家思考一下,6根火柴棒可以摆出的最小和最大的自然数是多少?

  生:6根火柴棒摆出的自然数最小是0,最大是111。

  师:没错。据此可画出该问题的算法流程图,即从0 - 111逐个判断所需的火柴棒数是否为6。如果是,则输出该数字;否则加一判断下一个数,如果超出111,则退出循环结束程序。依据算法写出Python程序,这里要注意,range函数起点缺省默认为0,终点为112,步长缺省默认为1。实际取值范围是包含起点但不包含终点的。在编写代码时,我们遇到了一个新问题,如何计算一个自然数需要的火柴棒数呢?一个复杂的问题往往由多个小问题构成,我们可以采取自顶向下逐步细化的方法一个个来解决。面对新问题,我们可以通过实例进行分析,例如求14需要多少根火柴棒?首先,所有的自然数都由数字0 - 9构成,将数字0 - 9所需的火柴棒数目一一对应,保存到列表变量f中,计算一个自然数所需的火柴棒只要将对应的列表值依次相加即可。如14,先看个位上的数是4,则取出下标索引为4的列表值,结果为4。再看十位上的数为1,则取出下标索引为1的列表值,结果为2,将两个结果累加,即为6,因此自然数14需要6根火柴棒。

  师:找到方法后,细化算法流程图,依据算法编写出Python程序。这里需注意要获得自然数num个数位的值,用num取模10表示num除以10取余,求得该自然数的个位数,然后运用累加器将这个位数所需的火柴棒数累加到求和变量total中。接着用num整除10,去掉num的个位,重复以上步骤,直到num为0。接下来我们一起来分析程序的具体执行过程。

  师:我们可以借助Python的调试器PDB分析程序的执行过程,并设置断点用于观察各变量值的变化。开始逐行运行程序。第一步,输入测试数据14赋值给变量num。下一步,定义列表变量f为0 - 9所需的火柴棒数目。下一步累加器total赋初值为0,此时即将进入while循环,观察变量num和total的初值分别为14、0。继续执行,由于num 14大于0,满足while条件,进入第一次循环。

  师:第一次循环结束,我们可以发现各变量的值发生了改变。首先num 14取模10,得到num的个位数4,赋值给变量x,列表变量f下标索引为4的元素,即数字4所需的火柴棒数目为4,累加到total中,total 0 + 4变为4。变量num整除10,去掉个位,结果为1,继续执行。

  师:由于num 1大于0,满足while条件,进入第二次循环执行,循环体各变量的值再次发生改变。首先num 1取模10,得到num的个位数1,赋值给变量x,列表变量f下标索引为1的元素,即数字1所需火柴棒数目为2,累加到变量total中,total 4 + 2变为6。变量num 1整除10去掉个位,结果为0,继续执行。由于此时num 0不大于0,不满足while条件,退出循环执行。输出语句,输出变量total的值为6,即自然数14所需的火柴棒总数为6。程序结束。

  师:通过逐行运行观察到各变量值的变化过程,有助于我们更好地理解程序和调试程序。程序代码是否正确,只测试一个数据是不够的,需要用更多的数据检测。分别输入测试数据14、108、0观察运行结果。

  师:输入并运行程序。输入第一个测试数据14,所需的火柴棒数因为4 + 2,结果为6,正确。再次运行程序,输入第二个测试数据108,所需的火柴棒数应为7 + 6再加2,结果为15,正确。再次运行程序,输入第三个测试数据0,所需的火柴棒数应为6,结果为0,错误。

>> 点击阅读全文
《信息技术 必修1 2.4可以复用的代码(第一课时) 逐字稿-3,680字 第5版》.docx
将本文下载保存,方便收藏和打印
导出文档