借助电子表格辅助Python教学的实践探索
2024-04-14马素平
马素平
[摘 要]“算法与程序实现”是高中信息技术课程的必修内容,江苏省高中信息技术学业水平测试要求学生必须掌握Python程序设计语言的基本应用。文章着重探索如何借助电子表格结构清晰的特点以及强大的内置函数和公式书写功能,一步步清晰地展现算法设计过程,引领学生把握问题本质,顺畅地写出Python程序,全面提升他们的信息素养。
[关键词]电子表格;Python教学;算法设计
[中图分类号] G633.67 [文献标识码] A [文章编号] 1674-6058(2024)02-0095-04
高中信息技术必修课程包括“数据与计算”和 “信息系统与社会”两个模块,其中“数据与计算”模块又包括数据与信息、数据处理与应用、算法与程序实现三个方面。“算法与程序实现”这部分内容主要是学习Python程序设计语言的基本应用。在Python的日常教学中,教师经常会遇到学生了解所需要解决的问题,但是用程序设计语言又无法准确表达出来的情况。高中生经过小学、初中的信息技术课程的学习,已经掌握了电子表格软件的一些基本操作方法。基于此,笔者结合案例研究如何借助电子表格辅助Python教学,一步步清晰地展现算法设计过程,引领学生把握问题本质,顺畅地写出Python程序,全面提升学生的信息素养。
一、借助电子表格结构清晰和运算功能强大的特点展示算法的执行过程,使问题迎刃而解
【案例1】生日宴会上,同学们计划使用点燃的蜡烛(表示1)和未点燃的蜡烛(表示0)混排来表示寿星的年龄(二进制形式),请编程实现输入一个年龄(十进制整数),将其转化为对应的二进制数,从而帮助同学们知晓如何点燃蜡烛。
算法设计思路:了解十进制整数转化为对应的二进制数的方法,即除以2倒过来取余数,直到商为0时止。假设输入的十进制整数是10,那么对应的二进制数就是1010,执行过程如图1所示。借助电子表格(如表1)引导学生理清思路。通过键盘输入一个正整数并赋值给变量n,定义一个空字符串s,用来收集运算过程中产生的余数。因为10大于0,所以开始进行第一轮的操作:10除以2余数为0,s就变化为“0”,商为5,n的新值即为5。因为5大于0,所以开始进行第二轮的操作:5除以2余数为1,s就变化为“10”,商为2,n的新值即为2。以此类推,直到商为0,也就是n的新值为0时结束,最终s的值为“1010”。
借助表1的过程描述,能很方便地写出程序代码(如图2)。运行程序,测试样例,输入十进制数10,则输出二进制数1010。借助计算机系统中自带的计算器程序,验证结果的正确性,最终正确点燃蛋糕上的蜡烛(如图3)。
电子表格的运算功能强大,当运算量较小时,我们也可以通过口算得出运算结果,但当运算量较大时,口算就不方便了,此时可以使用插入函数或书写公式的方法来实现。例如,本案例中可使用mod(n,2)函数得到n除以2的余数,使用int(n/2)函数得到n除以2的商,且可利用自动填充功能进行列数据的填充。此案例借助电子表格结构清晰及运算功能强大的特点,逐步展示了算法的执行过程,使学生能够轻松地编写Python程序代码。
二、借用电子表格强大的计算功能,将计算过程完整地呈现出来,使相似问题差异比较一目了然
【案例2】某投资者购买了10万元的一年期理財产品,实际收益率为4.25%,由于产品一直在持续运作,投资者不按时赎回视为自动再投资。在收益率不变的情况下,至少多少年后投资可以翻倍?(达到20万)
算法设计思路一:投资本金为100000,所以给money赋初值100000,1年后的资产money=100000*(1+0.0425)=104250,2年后的资产money= 104250*(1+0.0425)=108680.625……如表2所示。从中可以发现,每年的money新值都等于上一年的旧值乘以(1+0.0425),即money=money*(1+0.0425)。每投资一年,就判断一下money新值是否小于200000,如果小于则继续投资,否则投资已经翻倍,无须继续投资,此时输出已投资年份即可。具体的程序代码图4所示。
算法设计思路二:投资本金为100000,1年后总资产为money=100000*(1+0.0425),2年后的总资产值money=100000*(1+0.0425)*(1+0.0425)=100000*(1+0.0425)^2,3年后总资产money=100000*(1+0.0425)^3,如表3所示。定义一个变量year表示年份,初值为0,每经过一年year=year+1,同时判断money的新值小于200000是否成立,若成立则继续投资,若不成立则结束投资,退出循环体。具体程序代码如图5所示。
案例2属于投资理财问题,在借助电子表格解决问题时我们需要知晓电子表格中乘方的表示符号为“^”,如第2年的总资产书写公式为=100000*(1+0.0425)^2。而在编写Python程序时用幂运算符“**”表示乘方,如循环体money=100000*(1+0.0425)**year。
【案例3】某投资者购买了10万元一年期收益率为3.7%的银行保证收益型理财产品。每年理财赎回后,他会提取2万元用作生活所需,余下资金仍购买此种理财。在收益率不变的情况下,多少年后资金被全部取出?
算法设计思路:投资者的本金为100000,所以money的初值为100000,1年后用于投资的资产值money=初值*(1+0.037)-提取的20000=100000*(1+0.037)-20000=84250, 2年后用于投资的资产值money=1年后用于投资的资产值 *(1+0.037)-提取的20000=84250*(1+0.037)-20000=67830.625,如表4所示。因此,我们可以得出,每经过一年money新值的变化,可通过表达式money=money*(1+0.037)-20000求得。每经过一年,year=year+1,同时判断money新值是否大于0,若大于0则继续投资,否则结束投资,最后输出共需投资的年份值。程序代码如图6所示。
此案例也属于投资理财问题,相较案例2难度略有加深,但经过电子表格的助力,思路变得逐渐清晰,问题也就迎刃而解了。
【案例4】某投资者购买了一年期收益率为3.7%的银行保证收益型理财产品。每年理财赎回后,他会提取2万元用作生活所需,余下资金仍购买此种理财。在收益率不变的情况下,投资者投入多少钱可以恰好在第10年取完最后一次2万元?
算法设计思路:因为需要计算的是投资本金,所以可以采用逆推的方法。该案例中共涉及三个变量:投资年份year,每年用于流动投资的金额money,以及由流动投资金额加上提取的20000得到的总资产,值为money+20000。因此新建一个电子表格,在工作表第一行输入列标题year、money流动投资金额、总资产。第10年因为已取完,所以能够用于流动投资的金额为0,则总资产=第10年的流动投资金额+20000=0+20000=20000;第9年的流动投资金额=第10年的总资产/(1+0.037)=19286.40309,总资产=第9年的流动投资金额+20000=19286.40309+20000=39286.40309;第8年的流动投资金额=第9年的总资产/(1+0.037)=39286.40309/(1+0.037)= 37884.67029,总资产=第8年的流动投资金额+20000= 37884.67029+20000= 57884.67029;同理,可以依次求出第7年、第6年……第0年(即初期投资)的投资金额,整个运算过程如表5所示。
厘清整个运算过程之后,开始编写程序,定义一个变量money表示每年的流动投资金额,逆推money的变化过程。第10年因为已取完,所以money=0,总资产为money+20000。我们需要依次求得第9年,第8年,…,第1年,第0年(初期投资)的流动投资金额,所以使用range(9,-1,-1)产生一个整数序列9,8,7,6,5,4,3,2,1,0,定義一个循环变量i表示年份,i依次取序列中的每一个值,第一次i=9, 执行循环体money=(money+20000)/(1+0.037)得到第9年的流动投资金额,第二次i=8,执行循环体得到第8年的流动投资金额……最后一次i=0,执行循环体得到初期投资金额。编写代码如图7所示,运行程序,输出结果为:初期投资 164667.90624925977 元。
以上三个案例同属于投资理财问题,且难度逐渐加大。教师借助电子表格展示整个解题思路,使学生不再畏惧难题,能够轻松编写Python程序代码。
三、借助电子表格的公式计算及自动填充功能,模拟大脑思维全过程,使解题思路清晰明了
【案例5】有一根长度为321米的钢材,要将它截成a、b两种规格的长度分别为17米和27米的短料,每种至少1段,问a、b两种规格的短料各分割成多少段后,剩余的残料r最少?
算法设计思路:先计算一下321米最多可以截取17米规格的短料数量18,此时剩余米数为321-17×18=15,不足以再截取27米规格的短料。因为题目要求每种规格至少1段,因此17米规格的短料数量不可能为18,故我们可以枚举17米规格的短料段数a为1,2,…,17。每取一个值,我们都可以求得剩余钢材可以截取的27米规格的短料段数b的值,以及剩余米数r,如表6所示。定义一个变量minr用来存放r的最小值,minr赋初值为16(实际上可以任取 [16,321]区间内的一个数)。用每次求得的剩余米数r和minr作比较,如果r 数字化环境下的问题解决,就是有效利用数字化技术和信息系统解决生活中的实际问题。通过在多个案例中强化使用电子表格,可以明显看到电子表格除结构清晰的优点外,还有强大的运算功能,其中插入公式、插入函数及数据自动填充等功能尤其实用。在教师使用电子表格辅助Python教学的过程中,电子表格的多种功能也越来越被学生所熟悉。教师应有效利用数字化技术辅助信息技术课程教学,培养学生利用信息技术解决实际问题的能力,全面提升学生的“数字化学习与创新”核心素养。 [ 参 考 文 献 ] [1] 教育部基础教育课程教材专家工作委员会,普通高中信息技术课程标准修订组.普通高中信息技术课程标准(2017年版2020年修订)解读[M].北京:高等教育出版社,2020. (责任编辑 黄春香)