Python程序设计教法改革与探索

2021-07-19 21:25周利荣
电脑知识与技术 2021年14期
关键词:能力本位问题驱动程序设计

周利荣

摘要:本文分析了传统程序设计教学的步骤、特点、缺点及针对高职学生产生的困境。分析了传统程序设计教学对高职学生产生困境的原因,并提出了“发现教学法”,分析了发现教学法程序设计教学的步骤、特点及优点。

关键词:程序设计;发现教学法;问题驱动;能力本位

中图分类号:G642        文献标识码:A

文章编号:1009-3044(2021)14-0071-03

Python是一种面向对象的、动态的、解释型的计算机语言,由于语法简洁、优雅,简单易学、易读以及可扩展性、可移植性、实用性等优点,已成为主流开发语言,高职院校也正逐步采用python作为程序设计教学语言。目前,高职程序设计课堂教学仍大多采用以单向传授为主的传统程序教学设计方法,在实际教学中,发现效果并不理想。

1 传统程序设计教学

1.1传统程序设计教学的一般步骤

(1)教师显示程序设计题目;(2)教师讲解程序设计所需相关知识点;(3)教师显示代码;(4)讲解程序功能并运行程序;(5)通过练习深化提升学生对相关知识点及程序的理解。

1.2 传统程序设计教学的特点

传统程序设计教学模式的特点是“单向传授,以‘教师、教材和课堂为中心,知识本位”。在课堂教学中,主要是教师传授学生听讲,即“单向传授”。教师是课堂的主宰,根据教材制定学习内容,控制着学生的课堂学习过程;学生处于被动学习的地位,只需按教师设计好的过程接受教师讲授的程序设计知识,然后通过练习巩固所讲内容;教师与学生、学生与学生之间基本没有互动。即以“教师、教材和课堂”为中心。传统的程序设计教学模式需要达到的教学目标是使学生系统地掌握程序设计知识,即“知识本位”。

1.3 传统程序设计教学的缺点

在针对高职学生进行程序设计教学的过程中发现,由于高职学生的数学、英语基础知识、思维能力、自控力较差,缺乏良好的学习习惯、学习方法、学习策略,在教师讲解程序设计相关知识点时,许多学生不能集中注意力,已经很少有学生在认真听课了[1]。

1.4 传统程序设计教学对高职学生产生困境的原因

传统程序设计教学对高职学生产生困境的原因在于违背了教学的基本原则——可接受原则。维果茨基说过:“教学必须符合学生的年龄特征,必须以学生的成熟或准备性為基础,这是可接受原则的基本要求”。学习程序设计需要很强的逻辑思维能力和抽象思维能力。高职学生的逻辑思维能力和抽象思维能力没有得到很好的发展,而传统程序设计教学是从抽象到抽象,读懂程序和编程需要很强的逻辑思维能力和一定的数学、英语知识,即传统程序设计教学对高职学生有很高的难度,使学生产生了畏难情绪和厌学心理。

1.5 走出困境的对策

走出困境的对策:从学生已知道的知识经验出发,由教师提出学生容易回答的问题开始教学,学生经历探究、思考、交流、讨论后回答问题,使教学过程符合高职学生的认知规律。

教师要变灌输式教学为启发式教学。传统程序设计教学方式是灌输式教学,是以教师为中心,不顾学生的接受能力,强行灌输,以教代学。启发式教学方式是以学生为中心,从学生的接受能力和知识基础出发,启发诱导,使学生经历了探究、思考的过程,教学过程符合高职学生的认知规律。

2 发现教学法程序设计教学

总结高职程序设计教学的实践经验,提出“发现教学法”。由教师提出问题,学生通过比较Python程序运行结果的差异,在教师的引导下,经过讨论、交流回答教师提出的问题,得到某个变量、函数参数的功能,逐步得到某个函数、语句以至整个程序的功能,即由学生自己发现知识的教学方法。

2.1 发现教学法程序设计教学的一般步骤

(1)教师显示题目;(2)教师显示代码,说明程序功能并运行程序;(3)改变某个变量、参数的值,运行程序;(4)由学生比较改变前后程序运行结果的差异;(5)教师提出问题;(6)引导学生讨论得到某个变量、参数的功能或含义;(7)重复(3)、(4)、(5)、(6),引导学生自己得出某个函数或语句的功能;(8)教师讲解相关函数或语句的知识点以深化学生对知识点的理解;(9)重复(3)、(4)、(5)、(6)、(7)、(8),引导学生自己得出某段程序和整个程序的功能;(10)通过练习深化提升学生对相关知识点的理解。

2.2 发现教学法程序设计教学实例

(1)教师显示题目(使用python的turtle模块的绘图功能绘制如图1所示的图形)及程序代码(见第5页)。

(2)说明程序功能并运行程序。

(3)改变函数forward()参数的值,运行程序。

改变forward(200)为forward(100)、forward(50),并分别运行,教师提醒学生仔细观察程序运行过程,并比较程序运行结果(图3、图4、图5)的差异。教师提出问题:三次程序运行结果的差异在哪里?很明显,图4 中线段的长度是图3中的线段的长度一半、图5 中线段的长度是图4中的线段的长度一半,这是由于函数forward()的参数由200变100,再由100变为为50引起的。引导学生自己得到函数forward()参数的含义是:线段的长度;函数forward()的功能是:沿画笔所指定方向前进指定的长度;教师讲解函数forward()的知识点。

(4)改变函数left()、rang()参数的值,运行程序。

①函数rang()参数改为36,left()的参数改为170,运行程序得到结果为图6。函数rang()参数改为24,left()的参数改为165,运行程序得到结果为图7。函数rang()参数改为12,left()的参数改为150,运行程序得到结果为图8。教师提醒学生仔细观察程序运行过程,并比较程序运行结果的差异。

教师提出问题:三次程序运行结果(图6、图7、图8)的线条数分别是多少?很明显,图6、图7、图8人的线条数分别是36、24、12,这同函数rang()的参数36、24、12是相同的,学生填好表格1中2、3列。引导学生自己得到函数rang()参数的含义是:循环次数,函数rang()的功能是:如果函数内只有一个参数,则表示产生从0开始计数到输入参数(前一位整数)结束的整数列表;教师讲解函数rang()的知识点。

教师提出问题:三次程序运行过程中海龟旋转的角度分别是多少?此问题有一定难度,教师可将学生分组进行讨论,并给出提示:旋转的角度=180-尖角的角度,所有尖角的角度之和为360,可先求出尖角的角度。很明显,图6 中共有36个尖角,角度之和为360,因此,每个尖角的角度为10度,旋转的角度是180-10=170。图7中共有24个尖角,角度之和为360,因此,每个尖角的角度为15度,旋转的角度是180-15=165。图8中共有12个尖角,角度之和为360,因此,每个尖角的角度为30度,旋转的角度是180-30=150。这同函数left()的参数170、165、150是相同的,学生填好表格1中4、5列。引导学生自己得到函数left()参数的含义是:向左旋转的角度;函数left() 的功能是:在画笔原来的方向上,画笔向左旋转参数指定的角度;教师讲解函数left()的知识点。学生填好表格1中6、7列。

②函数rang()参数改为15,left()的参数改为168,运行程序得到结果为图9。函数rang()参数改为9,left()的参数改为160,运行程序得到结果为图10。函数rang()参数改为3,left()的参数改为120,运行程序得到结果为图11。教师提醒学生仔细观察程序运行过程,并比较程序运行结果的差异。引导学生填好表格2中黑色部分。

教师提出问题:表格1的线条数是偶数还是奇数?线条数*(180-left()参数值)是多少?表格2的线条数是偶数还是奇数?线条数*(180-left()参数值)是多少?很明显,表格1的线条数是偶数,线条数*(180-left()参数值)是360。表格2的线条数是奇数,线条数*(180-left()参数值)是180。引导学生自己得出结论:当图形中线条数是偶数时,线条数*(180-旋转角度)=360,即旋转角度=180-(360/线条数);当图形中线条数是奇数时,线条数*(180-旋转角度)=180,即旋转角度=180-(180/线条数)。旋转角度同线条数存在数量关系,即函数left()参数值同函数range()参数值存在数量关系。

③函数rang()参数改为3, left()的参数改为120,运行程序得到结为图12,函数rang()参数不变, left()的参数改为-120,运行程序得到结为图13。教师提醒学生仔细观察程序运行过程,并比较程序运行结果的差异。教师提出问题:两次运行过程及结果有何区别?很明显,当left()的参数为正数时,海龟旋转方向为逆时针,三角形为正立;当left()的参数为负数时,海龟旋转方向为顺时针,三角形为倒立。

(5)教师讲解函数for语句的知识点,引导学生自己得出程序段(4-6行)的功能。

(6)改变函数begin_fill()、end_fill()的值,运行程序。

改变turtle.begin_fill()为#turtle.begin_fill(),改变turtle.end _fill()为#turtle.end_fill(),并分别运行,教师提醒学生仔细观察程序运行过程。教师提出问题:比较程序运行结果(图14、图15)的差异在哪里?很明显,改变前运行结果(图14)是有填充色的,改变后运行结果(图15)是无填充色的。引导学生自己得到函数begin_fill()、end_fill()的功能分别是:开始填充、结束填充;教师讲解函数begin_fill()、end_fill()的知识点。

(7)引导学生自己得出程序段(3-7行)的功能。

(8)改变函数color()参数的值,运行程序。

①改变color("red", "yellow")为color("red", "blue")、color("red", "green"),并分别运行,教师提醒学生仔细观察程序运行过程,并比较程序运行结果的差异。教师提出问题:三次程序运行结果的差异在哪里?很明显,三次程序运行结果(图16、图17、图18)的线条颜色是相同的,都是红色,三次程序运行结果的填充颜色是不相同的,分别是黄色、蓝色、绿色。引导学生自己得到函数color ()第二参数的含义是填充的颜色。

②改变color("red", "yellow")为color("blue", "yellow")、color("green", "yellow"),并分別运行,教师提醒学生仔细观察程序运行过程,并比较程序运行结果的差异。教师提出问题:三次程序运行结果的差异在哪里?很明显,三次程序运行结果(图19、图20、图21)的填充颜色是相同的,都是黄色,三次程序运行结果的线条颜色是不相同的,分别是红色、蓝色、绿色。引导学生自己得到函数函数color ()第一参数的含义是线条的颜色,函数color ()的功能是:设置画笔的线条颜色、填充颜色;教师讲解函数color ()的知识点。

(9)改变 import turtle ()为#import turtle,并运行程序,出现错误提示:“NameError: name 'turtle' is not defined”,并且是在程序的第二行:turtle.color("red", "yellow")。教师翻译上述英文的含义,并提出问题:为什么import turtle变为非执行语句会出现上述提示?如果学生不能回答,教师可给出提示:turtle库是Python语言中一个很流行的绘制图像的函数库,使用其中的函数color()、begin_fill()、forward()、left()、end_fill()必须导入turtle模块。引导学生自己得到import turtle语句的功能是:使用import关键字导入turtle模块;教师讲解import语句的知识点。

(10)引导学生自己得出整个程序的功能,教师显示附有注释的代码如下:

import turtle          #使用import关键字导入turtle模块

turtle.color("red", "yellow") #调用 turtle模块的color()函数设置画笔颜色="red",填充颜色="yellow"

turtle.begin_fill()    #调用 turtle模块的begin_fill()函数开始填充

for i in range(36):    #循环36次

turtle.forward(200)    #调用 turtle模块的forward()函数沿画笔指定方向前进200

turtle.left(170)       #调用 turtle模块的left()函数在画笔原来的方向上,向左旋转170度

turtle.end_fill()      #调用 turtle模块的end_fill()函数结束填充

(11)通过练习(使用turtle模块的绘图功能绘制如图2所示的图形)深化提升学生对相关知识点的理解。教师引导学生仔细观察图2,不难发现,图2中线条颜色、填充颜色均为红色,因此,color()函数两个参数值均为"red",图2中线条数为5,是奇数,由表格2及上述结论知:旋转角度=180-(180/线条数)=144,旋转方向为顺时针,left()函数参数值为-144。其他代码不变。

2.3 发现教学法程序设计教学的特点

发现教学法程序设计教学模式的特点是“问题驱动,以‘学生、经验和活动为中心,能力本位”。是一种促进学生发展、学生学习的教学模式。[2]教师给学生塔建空间和舞台,提出问题,引导学生自己比较、讨论,并在此基础上促使学生自己得出某个函数或语句的功能,即“问题驱动”。学生变成学习的主体,教师只是学生知识建构的引导者、帮助者、促进者,教师与学生组成学习共同体[3];教师提出问题是从学生已有的知识经验出发的;就教师提出的问题,学生展开活动(比较、讨论、交流),即以“学生、经验和活动”为中心。发现教学法程序设计教学模式需要达到的教学目标是引导学生如何解决问题,发现知识,从而提高学生的解决问题的能力,即“能力本位”。

2.4 发现教学法程序设计教学的优点

发现教学法提高了学生的注意力和学习兴趣,增强了学习自信心,使学生看到了自己的潜能。由教师提出问题开始,学生的注意力被吸引到问题上,而问题又是从学生已知道的知识经验出发,学生是容易回答的,明显提高了学生的学习兴趣,增强了学习自信心。使高职学生认识到,程序设计并非深不可测,高不可攀,只要付出努力也是可以學好的。

发现教学法提高了高职学生的思维能力。在提出问题之后,引导学生从具体、简单的观察、比较计算出发,通过学生之间相互讨论,在教师的引导下,由学生自己提炼、归纳、总结知识点,自己得出某段程序和整个程序的功能以及程序之间的逻辑关系。提高了学生的抽象思维能力和逻辑思维能力。

发现教学法有利于培养学生的自主学习精神。发现教学法以问题为基础,以培养学生解决问题的能力为目标,把学生的学习置于简单且从学生的知识经验出发的问题中,通过学习者的自主探究和合作来解决问题,从而形成解决问题的技能和自主学习的能力。

发现教学法使学生的学习由机械学习变为有意义学习。传统程序设计教学采用“灌”的方式进行教学,要求学生死记硬背,反复练习;学生没有经历探究、思考的过程;只是消极、被动地接受知识,学到的知识不能灵活应用。因此,学生的学习是机械学习。发现教学法程序设计教学采用“启”的方式进行教学,在教师的指导下由学生自己发现知识,学生经历探究、思考的过程;学生将符号所代表的新知识与学习者图式中已有的知识经验建立非人为的、实质性联系;学生真实主动地进入知识的领域,拥抱知识、掌握知识;在参与中体验到学习的乐趣和成功。因此,学生的学习是有意义学习[4]。

参考文献:

[1] 牟章.高职高专学生缺乏学习主动性的原因及对策[J].教育与职业,2015(21):113-114.

[2] 单莎莎,张安富.教学理念的历史审视与价值定向[J].中国大学教学,2016(2):74-78.

[3] 崔诣晨.高校课堂学习共同体创新教育的任务驱动模式[J].山东教育(高教),2020(12):44-46.

[4] 武法提,田浩.挖掘有意义学习行为特征:学习结果预测框架[J].开放教育研究,2019,25(6):75-82.

【通联编辑:王力】

猜你喜欢
能力本位问题驱动程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
以计算思维为中心的数据结构教学方法探讨
“问题驱动式”生物高效课堂打造的做法
高职高专院校C语言程序设计教学改革探索
“问题驱动+能力提升”卓越课程建设与实践
能力本位的《影视艺人经纪》课程改革刍议
PLC梯形图程序设计技巧及应用