张丽军
摘要:作者以Python编程与九年级数学奇妙的分形——科赫曲线绘制为例,介绍了跨学科整合计算思维的Python编程教学设计流程,以期为培养学生的计算思维和跨学科素养提供参考。
关键词:计算思维;跨学科;Python编程;分形
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2023)11-0036-04
《义务教育信息科技课程标准(2022年版)》提出跨学科主题学习,即为培养跨学科素养而整合两种以上学科内容开展学习的主题教学活动安排,其目的是加强学科知识内在关联与整合,强调以真实问题或项目驱动引导学生经历跨学科主题活动的全过程。跨学科整合计算思维的核心理念就是打破计算学科和传统学科之间的界限,将计算思维以一种理念或模式整合到跨学科教学中,以实现交叉创新地解决问题。由于编程被认为是发展学生计算思维的工具之一,而计算思维工具又会对跨学科知识的理解与表达带来创新,因此,围绕Python编程来完成计算思维和相关学科的整合可以帮助学生更清晰地思考计算,培养学生的跨学科素养以及逻辑概念、解决问题的能力。下面,笔者以人教版初中数学九年级下册奇妙的分形图形——科赫(Koch)曲线绘制为例,介绍具体的教学流程。
选择项目
跨学科整合计算思维的教学需要思考什么样的主题知识适合编程和学科融合,合适的主题知识一方面要以真实情境下真实问题的研究和解决为重点,注重学科核心概念及学科间大概念的整合,另一方面要与学生的已有的认知和生活经验建立联系,在不同的任务阶段选择适合学生身心特点的活动和工具,以问题链和任务群作为跨学科学习支架来培养学生的计算思维。
笔者选取了人教版初中数学九年级下册相似三角形的拓展部分“奇妙的分形图形”,该部分介绍了科赫曲线的产生过程及原理,引出分形的自相似性的性质,本项目即以分形图形——科赫曲线的绘制展开设计,它是由瑞典数学家冯·科赫(H·V·Koch)在1904年提出的一种不规则几何图形,是现实世界中海岸线、动脉等结构的理想模型。它的绘制方法是把一条直线等分成三等份,将中间的一段用夹角为60°的两条等长折线替代,形成一个生成元,然后把每条直线段都用生成元进行替换,随着多轮迭代就会呈现出一条复杂的科赫曲线,这难以徒手绘制,但可以在计算机上直观地生成科赫曲线来模拟海岸线、雪花等。
本项目的难点在于使用编程的递归思想来理解数学中分形几何自相似性的性质进而探究自然科学领域的几何形体,涉及计算机科学、数学、科学等学科知识,学生在探究过程中需要掌握基本的Python编程知识和技能,了解如何将这些技能应用于解决跨学科问题。具体而言,在编程方面要能够运用Python中的turtle、自定义函数、递归算法等知识点绘制科赫曲线;在数学方面要了解科赫曲线的基本概念和绘制方法,知道分形几何的基本思想;在科学方面能发现自然界展示的分形并能够用它来描述不规则形状和复杂现象。因此,教师需要引导学生综合运用以上知识解决真实情境中的问题,锻炼他们的编程能力,使其探索数学文化,发展学生的高阶思维能力。
创设情境
本項目需要为学生创设真实生动的探究情境,借助一些支架过渡到语言开发类编程工具的使用,以实现循序渐进地贯穿计算思维的培养过程。
首先,教师呈现一座岛屿的平面图,提出问题“海洋与陆地之间,蜿蜒曲折的海岸线有多长?”,学生讨论后可能会猜测海岸线长度的具体数值,这时教师可以点出海岸线长度是个不确定的值,它取决于用多大的尺来度量,教师可以给学生提供数学工具GeoGebra改变标尺的长度测量曲线,学生发现当用较短的尺子测量时,海岸线的长度会变长,不会趋向于某个确定的值。
接着,教师解释海岸线由无数的曲线组成,当放大海岸线的一段曲线时,它和整体的形态非常相似,即海岸线的任意部分都包含和整体相同或相似的细节,从而介绍分形及其性质——自相似性。这时,提问“对于海岸线这样的不规则形状能否用一种数学模型来模拟它呢?”,自然引出可以用科赫曲线来模拟海岸线,教师呈现科赫曲线的二维动画,介绍其基本概念并让学生根据概念尝试在纸上或者使用计算机上的画图程序绘制1阶科赫曲线,学生填写学习任务单,并根据图1,将1阶科赫曲线分解为如下的步骤:
①将线段AB三等分,描画完第一个三分之一长度AC线段后,将画笔按逆时针方向(向左)旋转60°;
②描画三分之一长度CD线段,再按顺时针方向(向右)旋转120°,描画三分之一长度DE线段;
③按逆时针方向(向左)旋转60°,描画最后三分之一长度EB线段。
在整个情境创设环节导入了来源于生活中的不规则现象,通过数学工具、二维动画、图谱的形式帮助学生理解自然界的分形,展现出在研究实际复杂问题时改变尺度、化繁为简、发现规律的做法。这体现了计算思维中自顶向下分解复杂问题,抽象出数学模型的思想,同时,运用纸笔让学生体验绘制科赫曲线,激发学生的兴趣,形象地探索以抽象语言表达的数学模型。
分析算法
在上一环节教师让学生初步体验绘制简单的1阶科赫曲线的步骤,同时还要围绕递推和递归两种角度分析绘制多阶科赫曲线的算法,为下一阶段使用Python编程精确地模拟奠定基础。教师展示不同阶数的科赫曲线(如图2),让学生分别在纸上画出1阶、2阶、3阶的图形并思考从1阶到2阶每条线段发生了什么变化,总结规律。学生通过观察得出规律:1阶的每一条线段折起一个角形成2阶,随着阶数递增,每一条线段可以进行无限次变换,成为带有角的折线。在学生探究规律后,教师总结:通过递推的办法,从局部到整体,由易到难,由小到大,每一条线段都经历该过程,从1阶科赫曲线递推衍生出更高阶数的科赫曲线。
接下来,教师抛出探究问题“用递归的思想如何绘制高阶曲线”,并提示学生把上述递推过程倒过来,如要绘制5阶科赫曲线,假定4阶是已知的,再经历一次变换,4阶采用同样的方法去处理,最后变成1阶。这里教师要帮助学生理解递归算法必须有一个出口,可以是一条直线段,即为0阶科赫曲线,至此不再往下扩展,接下来就是倒推回所有的结果,从0阶、1阶一直倒推回5阶。
教师继续总结科赫曲线每次局部放大都和整体图形相似,这种特性符合递归算法的特点:①每一个问题在形式上都相同;②确定结束条件,递归就是原问题层层分解成子问题,每次调用低一阶,在计算思维中,自顶向下、先全局后局部的逆向思维即为递归思想。因此,算法分析有助于学生从递推的自底向上、从小到大的正向思维转向递归的逆向思维,教师让学生作图的过程可以辅助学生形象地理解递归函数的调用过程。
编程测试
在探究完1阶科赫曲线的绘制步骤以及多阶科赫曲线的递归算法后,教师请学生将算法转换成编程语言。教师提出,用Python模拟科赫曲线可以被分解为3个层层递进的子任务:①如何用代码模拟1阶科赫曲线?②如何模拟多阶科赫曲线?③如何模拟科赫雪花岛?
在学生明确子任务后,教师引导他们分析每个任务涉及的Python知识点,任务①的程序会用到turtle海龟绘图,任务②可以使用自定义函数、条件语句、turtle模块、递归算法实现,任务③则是在任务②的基础上加上循环结构。
任务①相对基础,学生根据学习任务单中1阶科赫曲线的步骤,回忆移动、转向、角度等语法,接着自主编程,定义AB线段长度为size,分成三等分,即可确定每次前进长度是size/3,前进4次绘制AC、CD、DE、EB线段,使用forward、left、right等子函数完成代码。
任务①主要考查学生对turtle函数旋转角概念及方向的理解,大部分学生可以写出如图3所示的基础程序。
任务②相对较难,教师可以组织学生2~3人为一组共同完成任务提升协作思维,同时为学生提供任务理解的支架即程序补全,如提供函数名称及参数,让学生填写函数体。图4为多阶科赫曲线的参考程序,自定义函数、递归算法、条件语句是整个程序的难点,调用自身的递归函数需要设置科赫曲线主函数的参数:size即线段AB初始长度,n为阶数也是迭代次数。函数体中运用if条件语句,如果n=0,那么递归出口就是一条直线段,直接前进size,否则即为高阶科赫曲线通过函数koch(size/3,n-1)调用自身实现递归,对应低一阶每次前进的线段长度,直到0阶结束。
此外,任务②的第二部分需要注意初始化定义turtle画布大小、画笔宽度、抬笔、落笔、画笔隐藏等知识点。学生完成程序后需要对代码进行测试,可以修改参数大小观察科赫曲线的变化,这里教师可以设计一个探究问题:“如果将递归的出口设为1阶科赫曲线,推广到高阶代码的途径应该是2阶及以上的科赫曲线,应该如何修改呢?这与0阶递归出口相比,哪一种程序会更加简洁易于理解?”该问题鼓励学生评估算法效率以及反思性提问,通过简洁的表达向同伴阐明做出某种选择的理由,因此支架和探究性问题结合起来可以评估学生能否提出优化问题的策略。
任务③是进阶任务,教师让学生探究如何模拟科赫雪花岛,从整体和局部的角度引导学生思考一条科赫曲线和科赫雪花之间的关系。科赫雪花的绘制分为两个层次,从0阶科赫雪花看出,可将三角形三条边分解为三个基本单元——称为“边”,是一条直线。从大于0阶的科赫雪花可以看出,“边”即为一条科赫曲线,可将其分为四个基本单元——称为“线段”,因此科赫雪花可以看作是由三条科赫曲线组成,每一条科赫曲线又由四个线段组成。学生探究得出通过循环次数的计数完成科赫雪花图案的绘制,这里自然引入for循环控制结构,将科赫曲线、转动角度、循环次数之间建立联系,考查学生对360°周角概念的理解。科赫雪花效果的示例代码如图5所示。
任务③更加直观地让学生了解分形图形的基本思想,整体几何图形是由一个简单的微图形结构自我复制、反复变换形成最终的图案,其自相似的性质与递归算法的思想一致。
总结反思
笔者设计了跨学科项目“绘制科赫曲线”,此项目将使用计算思维解决跨学科问题的过程归结为选择项目、创设情境、分析算法、编程测试、总结反思,体现了抽象与分解、递推与递归、测试与评估等一系列思维活动,学生在项目探究中需要掌握计算思维中重要的递归思想以便于他们探索更多的分形,如曼德尔布罗特集,同时迁移应用设计自己的创意分形图。
笔者认为,信息技术与数学、科学融合的思路可以分为两种,一种是将培养计算思维的工具如Python编程作为解决数学问题的技术工具或者是一种知识建模工具,运用编程建模,帮助学生建立程序设计、数学计算、科学认识之间的联系,学习的重点在于理解数学概念与科学推理。另一种是以编程为主,学习重点是计算思维的相关概念,以编程算法核心知识为主,而非以数学核心知识的学习为主线,将数学知识作为先修知识,在Python中还原并解决问题,学生需要完成的编程任务是依托数学知识用Python来表达,掌握基本的Python语法和程序设计方法及思想。因此,确定跨学科主题尤其重要,以便综合培养学生计算机科学领域的素养、数学素养、科学素养。
参考文献:
[1]中华人民共和国教育部.义务教育信息科技课程标准(2022年版)[S].北京:北京师范大学出版社,2022.
[2]吴刚平.跨学科主题学习的意义与设计思路[J].课程·教材·教法,2022(09):53-55.
[3]张瑾,徐紫娟,朱珂,等.国际视阈下跨学科整合计算思维的课程模式研究[J].现代教育技术,2022(12):49-57.
[4]崔志翔,徐斌艷.数智时代国际基础学科计算思维教育发展的策略、方向与启示——《PISA 2022数学框架》之思考[J].远程教育杂志,2022(06):13-21.