以Python语言面向数学问题培养学生计算思维
2022-04-29蒋克凤
蒋克凤
【摘要】以Python语言解决数学问题为例,探讨利用Python语言进行教学的方式,建立学生的计算思维。
【关键词】Python语言;数学;计算思维
计算思维被定义为人的思维活动,需要依托在计算机上,并对计算机进行充分应用,借助其解决问题、系统设计以及进一步理解人的行为的一项活动。周以真在2010年进一步将计算思维定义为:“通过将问题和解决方法抽象处理,以达到解决问题目的的思维过程,在这个过程中,计算思维的核心是解决问题。”周以真教授这一概念的提出,对计算思维有了更具体完整的认识。人们也都对这种说法广泛认可。同时也有越来越多人开始参与研究这一概念。
一、Python语言与计算思维的关联
1.Python程序是计算思维的载体。抽象的思维必须依托一定的实物也就是载体才能具体表现,计算思维同样如此。计算思维在现代信息技术社会,要能体现智能化作用,体现现代化特点,Python程序是个较佳的载体。学习者在应用不同算法的过程中,可以依托于Python程序,先进行阅读,帮助我们了解程序体现的思维过程后可以尝试编写,编写时编写者的思维可以再次体现在程序中,进而不断探索问题的求解过程,实现计算思维的发展。也就是说,计算思维可以通过对Python程序的编写来实现,Python程序就是计算思维发展的载体。
2.Python语言和计算思维的核心相同。Python语言简单易懂、可移植性强、可扩展性广、可嵌入性高,有丰富的库、具有极佳的可读性。初学者学Python,不但入门容易,而且将来深入学习后还可以编写复杂的程序。通过Python语言的学习,能对不同的问题进行客观描述、过程设计、最后求解。计算思维的核心元素:分解问题、模式识别、抽象、算法设计。Python语言和计算思维一样,都需要经过抽象、算法、归纳、分解等操作来实现。所以,Python语言和计算思维具有一样的核心内容,即解决问题。
3.Python程序和计算思维密不可分。学习者在学习Python程序的过程中,面对问题不可能一下子就能知道怎么去编写,怎么解决问题。必须要经过一定的操作步骤,才能找到解决问题的思路,需要经由一定的过程才能不断提高自己的解题能力,在这个过程中必然离不开学习者的计算思维。通过一次次的解题练习,学习者的计算思维得到显著提升,能熟练应用程序工具解决问题,还能对程序进行再创造。由此可见,学习者Python程序操作能力的增强和计算思维能力的提升密切相关。
二、面向数学问题的Python基础语言学习
在本次教学案例中,我结合“变量与表达式”内容,设计从基础到复杂的数学问题,要求学生发散数学思维,应用Python求解,获得正确的答案。
1.求解基础数学题,形成抽象和形象化表达思维。对于我们学校的学生来说,学科基础知识不牢固,学习力比较弱,他们只具备基础的运算能力和基础的数学思维能力。所以我首先为学生设计四道简单且相互关联的数学题,让学生在解释器窗口计算。第一道比较简单。题目:假设你在操场内挖出了一个装着20枚金币的袋子。第二天,你偷偷跑到操场的创新工作室,把这些金币放进了复制机里,几个小时后,它产出10枚闪闪发光的新的金币来。
问题1:如果在过去的一年里,你每天都这样做一遍的话,你的财宝箱里会有多少金币?
问题2:如果校园的流浪狗发现你藏在宿舍的金币,每周都能成功偷走3枚,那一年结束时你还剩多少金币?
问题3:假如你在宿舍门口放了条板凳,这回流浪狗只能偷到两枚金币,那么一年结束后还剩多少?
问题4:如果在复制机复制金币时猛敲一下它,每次会多吐出3枚金币,那一年后你将得到多少金币?
我们可以发现这是几个非常简单的数学题,如果在程序代码中直接让程序进行计算,不仅使得程序看起来有点怪,可读性不强,还有可能会因为后续数值变化及数据的重复使用而造成程序计算的结果出现错误。此时,我提出了一个观点:既然数值会变,有没有不变的方法呢?抛出变量和表达式的知识点,引导学生自主学习变量和表达式的知识。而后,举例帮助学生加深理解变量和表达式。如何设定变量和书写表达式才能使程序简单易懂,同时表达简单且正确。于是,我们需要对程序进行一定的改变,增加变量与表达式。
这时告诉学生要设定具体的变量,注意程序代码的书写情况。比如可以设找到的金币的程序代码为:found_coin,赋值的金币:copy_coin,偷走的金币:stolen_coin。运行以后,我们能得到相同的答案。不同的是,面对随时可能会发生变化的数字,我们不需要再一次重新计算,只需要对变量赋值进行改变即可。
2.求解经典数学题,强化变量与表达式的使用。在学生计算并初步掌握了变量与表达的使用之后,我继续抛出问题,要求学生“求梯形面积”及“计算歌手得分”,由此达到巩固基础概念的目的。在“求梯形面积”的过程中,学生可从问题中找到变量及运算方法,进而可以独立完成该程序的设计,并正确解答问题。在“计算歌手得分”过程中,解题的流程同上,但这个题相对于梯形面积求解会稍微复杂一些。问题中多次出现“平均分”,怎么理解这么多“平均分”呢?我们首先要理解在不同情况下“平均分”的含义,歌手的平均分有仅仅去掉最高分或者去掉最低分的情况,还有同时去掉最高分和最低分的情况,所以要分多种情况来思考,再引导学生思考用变量和表达式怎么表述这个流程。当然,在表述这个问题的过程中,流程图能起到非常直观的作用。可以先用流程图描述思维过程,在流程图中确定好变量,再用程序代码来表述,这样变量与表达式才能描述得更清晰。最后学生通过程序设计实现了问题的求解。
通过上面这两类数学问题的学习,我们把它们引入Python中进行表达,引导学生逐步应用计算思维解决问题,不仅满足了学生螺旋式上升的学习规律,还达到了培养其计算思维的目的。最后,在程序的运行中,要引导学生多去总结如何定义变量、如何书写表达式、如何清晰地展示结果等。引导学生总结出规律,才会对学生后面的学习产生推动作用。
3.归纳程序设计中抽象与形象化表达。通过上面几节课的讲解,学生对程序设计有了新的认知。学生知道了要解决一个问题,应该先找到问题的根源,再找出相应的“变量”。学生在这个过程中相应的知识框架和技能得到了进一步完善,也体会到了程序设计中变量的作用。
随后我给出了另一个例题:有个牧场,牧场上长满牧草,每天牧草都匀速生长。这片牧场里的草可供10头牛吃20天,可供15头牛吃10天。问可供25头牛吃几天?这片牧场每天新生的草量可供几头牛吃1天?
在数学课上,可以引导学生简化这类题,让学生把复杂问题简单化。根据例题可知每头牛每天的吃草量是不变的。所以,我们就把每头牛每天的吃草量简单地假设为单位1,这样问题就简化为:add_grass=总草的量-原有的草量。
牧场20天内长出的草加上原有的草grass_20共有:10*20=200。
牧场10天内长出的草加上原有的草grass_10共有:15*10=150。
牧场10天内新长出的牧草add_grass为:200-150=50。
牧场10天中,每天长草的量speed_grass:50/(20-10)=5。
求出原有牧草yuanlai_grass:200-5*20=100。
25头牛吃的天数days:100/(25-5)=5。
在这种思路下,学生就可以更加清晰地看到在计算过程中,10*20*1表示从开始到结束20天的总草量(grass_20),15*10*1表示从开始到结束10天的总草量(grass_10),两个关系式之间存在的差值就是10天的新增加的草量。这样,学生对解答这类问题的畏难情绪便会得到改善,解题思路也变得清晰明了了。
面对看似很难的数学问题,应用计算机辅助解题就会变得简单,这就是Python程序的魅力。同时,在应用的过程中学生还必须要合理正确地使用变量,通过掌握多样的解题方式,不断提高学生的计算思维,将问题分析转化为高效的算法设计,最终学生Python程序的学习就会达到较好的效果。
【参考文献】
[1]中华人民共和国教育部.普通高中信息技术课程标准[S].北京:人民教育出版社,2017.
[2]贾瑞凤,马曾,侯春龙.以Python为工具培养学生计算思维[J].电脑知识与技术, 2018(02).
[3]郑戟明.Python程序设计课程中计算思维的应用[J].大学教育,2016(08).
(基金项目:本文系海南省小课题“新课程背景下提高学生学习信息技术积极性的实践研究”的研究成果之一,课题编号:A418-2021009)