产品搜索
产品搜索
新闻资讯
媒体专区
汇得学院
投资者关系
党建活动
业务领域
社会责任

于晓雅 樊磊 Python编程与算法教育的战略及辅导准则返回列表

2022-11-22    编辑 ob欧宝下载

  自信息技术新课标以Python言语作为中心编程言语引荐以来,Python编程与算法教育成为执行新课标课程方针的根底。如安在中小学Python编程与算法教育中,执行课标精力,环绕“算法以及根据算法的问题求解”这一中心问题,根据根底教育阶段学生特色把握恰当深度和广度,经过算法学习和实践,为深化领会并运用核算思想(信息技术的思想、办法和手法)处理问题供给坚实根底,完结“运用核算思想处理问题”才能培育的课程方针,是广阔信息技术学科教师一起重视的论题和首要研讨点。

  作为普通高中信息技术新课标的重要内容,中小学Python编程与算法在教育中现在存在如下问题和困难:

  榜首,教育内容挑选的困难。高校中核算机及其相关专业关于算法的教育现已构成十分齐备的系统,但由于中小学生与大学生在年纪和认知上存在差异,学科根底也不同,所以根底教育阶段的算法及问题求解教育,不能是高校教育内容的简略简化,也不能只将其作为大学算法课程的前序预备而不涉猎实质问题。上述情况使得中小学算法教育内容在深度和广度方面遍及呈“高不成、低不就”的窘态。

  第二,教育实践层次的困难。首要,作为核算机科学的重要分支,算法与数学、数据结构、编程言语特性亲近相关,现已成为一个的齐备的常识系统,单纯讲算法自身很难施行。其次,Python言语封装了许多根底算法的完结,并且触及交织杂乱的概念(如数据类型、笼统数据类型),究竟是讲算法的底层方面仍是讲高阶运用难以取舍。再次,怎么处理算法的直觉描绘(非方式化描绘)、流程图、伪代码(半方式化描绘)和编程完结(方式化描绘)之间的联系,也是教育实践的难点。

  第三,事例挑选的困难。中小学阶段的算法教育是为编程教育服务的,所以有必要遵守编程教育的总方针:运用核算思想处理问题。但限于中小学生的认知水平缓常识深度,教育事例的求解流程和问题深度很难把握,所以挑选恰当的事例成为施行Python编程与算法教育的要害。

  第三,算法的方针、直观思想以及逐渐导致方式化描绘的演化进程是高中(包括小学、初中)算法教育的重要部分,教育中应防止直接提出一般化、方式化的算法描绘。

  第四,算法中所触及的中心思想、方式化或半方式化表明、算法推导的数学及布景常识应在学生的常识规模内,或稍微超越学生的常识规模。

  第五,算法的编程完结上,准则上不触及较杂乱或较具技巧性编程,较杂乱算法可不做实践的编程完结或只做Python-like伪代码完结,但算法作为教育事例,有必要先讲清楚其背面的要害思想。

  第六,高阶算法所处理的问题应具有典型性、时代性、挑选性、普适性和适用性,并且对学生的后续学习或其他学科的学习有启示效果。

  第七,在时刻和条件都答应的情况下,应对处理同一类问题的、根据不同战略所完结的算法做功用比对,并挑选出较优算法。

  在Python编程与算法教育中,要一直遵循“需求导向、问题处理、做中学”的定位,清晰学会运用函数比把握编程技巧更重要。在规划编程事例时,要把握输入/输出函数,能够灵敏运用非数值数据类型,包括字符串、列表和字典;要了解Python言语反常灵敏的循环及操控结构;鼓舞教师将Python当作完结版的“伪代码”来运用,即便的确需求用伪代码,也主张运用Python-like风格;假如要运用Python的高档特性,编程事例应尽量依托Python言语特色,并以算法完结的需求恰当逐步地引进。但笔者主张,非必要尽量不运用Pyt hon的高档特性。

  算法战略是指在算法规划中所运用的问题求解的战略,是核算思想最直接、最详细的表现方式。算法战略的视角比完结算法时的详细编程完结办法在站位上要更高。

  在中小学编程教育中,在算法教育里,常见的算法战略和它们用于处理的使命首要有:迭代(也称为循环)——用于处理重复性的使命;递归——用于完结迭代的一种高效办法;蛮力法——在没有更好的办法并且核算资源(时刻和空间)答应的前提下,能够测验选用的求解问题的办法;回溯——用于测验不可行的挑选,意图在于尽可能扫除这类挑选。

  算法以及根据算法的问题求解是核算机科学的最重要的组成部分,也是信息技术新课程最根本、最中心的内容,算法教育中教育事例的挑选是最重要的要害点。下面,笔者以斐波那契数列的问题处理途径为例,解析在上述准则和战略的辅导下,怎么施行Python编程和算法教育。

  斐波那契数列从0和1开端,之后的斐波那契数列系数就由之前的两数相加。高中数学必修五在解说数列前n项和的课后材料中提到了斐波那契数列,作为数学常识生活化、开展学生笼统思想才能的拓宽。

  斐波那契数列(Fibonacci sequence)由于相邻两项的比无限趋近于黄金比等性质,又称黄金分割数列。它是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁衍为比如而引进,故又称为“兔子数列”。假定一对刚出生的小兔子一个月后能长成大兔子,再过一个月便能生下一对小兔子,尔后每个月生一对小兔子。假如不发生逝世,一年内逐月的小兔子对数是一组十分特别的数字:1,1,2,3,5,8,13,21,34,55,89,144,……不难发现,从第三个数起,每个数都是前两个数之和,这个数列称为斐波那契数列。

  在现代物理、准晶体结构、化学等范畴,斐波那契数列都有直接的运用,斐波那契数列的通项公式表明如下图所示的公式(1)。

  在算法教育中,斐波那契数列是最简略的递归界说函数,因而十分合适用来阐明完结根本递归算法的办法。

  斐波那契数列的Python完结所需根本常识包括:运用if 句子完结简略迭代/循环、自界说函数、函数的递归界说。

  斐波那契数列自身便是用递归方式界说的,Python是函数式编程言语,支撑函数的递归界说,即函数体的内部包括对函数自身的调用。因而,公式(1)能够转换为一个合法界说的Python函数,并测验让学生输出一些可很快经过人工验证的值(不要太大)(如下图)。

  能够注意到,在核算最终一个值时是需求一点时刻的。在上述的递归调用中,许多中心值要重复核算。如下图所示,在核算fib_1(4)时,fib_1(2)就重复核算了2次。明显,n的值越大,在核算fi b_1(n)的进程中,需求重复核算fib_1(k)(k<n)的次数就越多。

  为了优化斐波那契数列的递归完结,一个最简略的办法便是在每次核算中,将前面现已核算过的值“回忆”下来,不再重复核算。这种在核算进程中运用回忆的机制能够有用防止重复及浪费资源,是所谓动态规划办法的一个最简略的比如,动态规划便是指资源的动态再分配。动态规划完结需求触及如下Python常识:Python字典、Python的Dict内建目标(一种特别的Python字典)、对迭代器运用if句子。下图所示代码是一个带有回忆的版别。

  作为比照,核算fib_2(20)会发生fib_2()的39次自调用;而若运用fib_1(),则核算fib_1(20)会发生21891次调用。

  在Python中,恣意目标只需界说了某种_next _()办法,便是一个迭代器。因而,Python中的容器类数据类型,如列表、元组、字典、调集、字符串等,都能够用于创立迭代器。有了迭代器的概念,迭代的概念就比较简略理解了:迭代便是从迭代器中顺次抽取元素的进程。

  Python有一个内建的“装修器”(decorator),可用于主动回忆任何函数。经过运用这个装修器,核算斐波那契数列的函数能够愈加简化。

  以下完结运用Python的高档特性——Python装修器句子。简略地讲,装修器便是在不改动本来函数代码的情况下,给其添加一些附加功用,如上面回忆函数中心值的功用。

  下图代码完结的函数fib_3()与fib_1()简直完全相同,但运用了装修器@functools.1ru_cache(),其间maxsize特点用来指示在函数的最近调用中应该缓冲多少次,设置maxsize=None表明对次数不做约束。

  元组拆包便是将元组中的元素别离赋给变量。运用Python的元组拆包技巧可给出斐波那契函数的一个功用更高的完结(如下图)。

  在本例中,句子“ last ,next=next,last+next”完结将last的值更新为next的值,而将next的值更新为“last+next”的值,便是一个元组拆包。运用拆包技巧,核算fib_4()只需循环n-1次!

  到现在停止,所写的函数只能发生特定方位上的斐波那契数的值,假如要一次性将到某个值停止的整个斐波那契数列都输出,能够运用一个简略循环(如下图)。

  教师能够引导学生继续进行拓宽操练,如探究斐波那契数列运用矩阵非递归化优化,也能够探究斐波那契数列与黄金分割的联系,或许运用动态规划优化函数fib _up_to()等,提高学生学习爱好,培育精雕细镂探究的立异精力。