康甜甜
雪峰中学 浙江 义乌 322000
在信息技术课程改革的背景下,编程教育越来越受到重视。在最新改版后的浙教版信息技术教材中,算法和编程教育占据了很大的比重,整个八年级上册的信息技术教材都是Python语言程序设计。Python语言对于教师和学生来说都是全新的内容,教师在教学中也没有太多可借鉴的教学实例[1]。如何让学生更轻松高效学习Python,笔者结合自身经验和查阅资料,进行了多种尝试。现就对Python教学策略展开讨论。
Python程序语言是一个新事物,学生没有什么编程基础。编程本身比较抽象,学生没有编程思维,且不习惯用编程语言解决问题。教学中总是出现学生现有认知水平和所学知识落差较大的情况。因此一开始学习Python编程会比较艰难,学生也搞不懂到底在学些什么,长此以往便学不下去了。针对这样的情况,老师们可以利用一些与生活相关的情境,减轻学习之初对编程的畏惧心理,激发学习兴趣,提高学习效果。
例如,在介绍Python语言时,教师可以通过一些案例或视频讲解Python编出来的程序或游戏,并给学生展示用C语言和Python语言编写同一程序的代码,让学生对比感受Python语言的简洁,从而激发了学生的学习兴趣,降低了对编程学习的抵触心理。
在学习中,教师可以用生活中的一些实例来引入。例如,在学习多分支结构程序设计时,教师先引入这样的情境让学生编写程序:在旅游景点买票时,如果1.2m以下免票,1.2-1.5m半价票,超过1.5m全票,那么买票时究竟要付多少钱。对于这种生活化的问题,学生马上就能想到按照身高考虑票价。对于3种身高情况,用学过的if-else语句不能解决问题。这时候老师引入if-elif多分支语句,学生很快就能掌握多分支语句的应用情况,也会在刚刚学会之后对新知识跃跃欲试。此时教师再引入下一个问题,如何将一个百分制的成绩按要求转化为相应的A、B、C、D、E五个等级。有了上一次成功编写程序的经历,学生也很快地从这一与自身生活贴近的情境中总结出解题方法,增强了学习编程的自信。
循环结构的学习是Python编程的难点,开始循环结构的学习后学生很快就产生厌倦心理。在这一阶段,教师可以用更简单的情景引导学生学习。例如,教师在讲解棋牌上的麦粒这一问题前先引入存钱的问题:每天往一个存钱罐存入2元钱,一周之后一共存了多少钱。学生很快就能说出答案为14,那么中间的过程又是怎样的呢。这时教师带领学生借助表格推演一周内存钱罐累加存钱的过程,这一案例对接下来理解棋盘上的麦粒问题更有帮助。
在学习Python编程时,教师通过创设情境激发学生的学习兴趣,降低学生的畏难心理,将抽象的学习融入更有趣的情境中,促进学生更好地学习。
在Python教学中,发现学生存在较大的个体差异。有些学生基础差一些,注意力也不集中,稍微复杂一点的内容从一开始就听不懂,一节课都跟不上节奏。为了减少部分学生跟不上的情况,我们可以借助导学案,给学生提供一个“向导”,让学生们知道每一步要干什么,解决问题的过程是怎样的。
例如,在开始学习for循环时,为了帮助学生理解for循环的执行过程,导学案中设计了一系列由易到难的问题,学生探究并回答问题。教学中教师下发导学案,学生借助导学案,跟着教师的节奏一起学习。
过程1:在以下案例中(如图1),为了让学生能理解每次循环时变量的变化和程序运行的过程,教师带领学生共同探究经历了几次循环,循环事件是什么,第n次循环中循环变量i的值是什么,运行结果又是什么。
图1 输出各个字符
过程2:在教师讲解range()函数时,学生对range()函数的格式和参数设置在理解上有一定的难度。这时教师可以通过设置不同的起始值、终值和步长,将遍历的结果列举出来帮助学生理解range()函数。运用变式,将案例进行多种变化,让学生体会起始值、终值和步长对程序执行的影响。这时候学生可以利用刚刚学过的知识进行迁移,以同桌两人为单位,合作探究以下三个程序(如图2),并完成任务单上的问题:共经历了几次循环,循环事件是什么,第n次循环中循环变量i的值是什么,运行结果又是什么。
图2 range函数变式
在本案例中,一开始学生对于循环执行过程无从下手。教师带领学生用导学案学习,导学案把程序执行过程进行了拆解,让学生通过一步步完成导学案上的问题而理解程序执行的过程。导学案的作用相当于一幅地图,能引导学生跟上学习,促进教学目标的实现。
义务教育阶段,学生在学习基础、学习能力等方面参差不齐。教师在教学中应关注整体,正视学生的个别差异。Python编程是一门逻辑性非常强的语言,很多学生学了很久还是不能入门[2]。如果按照书本的节奏安排课程,很多学生很快就学不下去了。有些学生对编程很感兴趣,甚至小学或初中参加过编程培训课程,他们可以跟上课堂的节奏。这样的尴尬情景,让某些学生越学越失去信心,越学越惧怕。长此以往,学生便在学习中产生了较大的分化。到了高中以后,学生还要学习Python,初中的不良体验会让部分学生直接放弃学习Python编程。为了满足不同学生的学习需求,让尽可能多的学生都能学有所得,可以采用分层教学。
例如,在练习input()和print()函数的使用方法时,教师展示人机交互情境,实现姓名和年纪的一问一答。完成较快的同学这时候可以在此基础上续写对话,让电脑继续提问年纪或兴趣爱好等其他问题(如图3)。这种分层的任务设置,其实质上是让慢一点的学生掌握基础的知识和技能,学得快的同学进一步巩固练习。这种“分情况”的教学任务设置,不会让好一点的学生吃不饱,也不会让基础差一点的学生不想吃,看到复杂的学习任务直接丧失学习兴趣,也让老师对所有学生的学习情况有了更全面的了解。
图3 输入输出练习
例如,在利用while循环编写复杂的程序时,对于基础弱一点的学生,完成“银行储蓄问题”就好。速度快一点的学生,可以尝试编写程序,判断加到第几项时s=1+2+3……+n值会超过1000,s=1+1/2+1/3+1/4+……+1/n的值会超过15。这种分层次的教学任务设置,体现了面向全体学生的教学原则,也照顾到了不同学生的学习需求,让教师的教适应了学生的学,同时也促进了学生之间的适当竞争,提高学习效果。
分层教学体现了因材施教的教学思想,每位同学的理解水平和操作技能存在较大的差异,“一刀切”的课堂绝对不是有效的课堂。长此以往,学生对信息技术的学习丧失兴趣,班级的成绩也会断层严重。
在利用Python语言编写程序的过程中,学生们经常会出现中英文符号切换错误、缩进格式错误等问题。教师在学生开始编程之前也会强调这些注意事项,但是效果往往不好。教师可以在学生出错的时候因势利导,让学生学会在错误中查找原因并深刻领悟注意事项,攻克了课堂重难点。当错误出现时,教师可以演示学生的错误,让全班同学共同纠错。最后教师总结语法规则和语句格式,学生也能更深刻地理解Python使用规则,也提高了纠错能力。
例如,在《顺序结构程序设计》一课,学生在编写程序利用海伦公式求三角形面积时,在将数学公式转为Python表达式时会出现很多错误。正确的面积计算公式是s=(p*(p-a)*(pb)*(p-c))**0.5。很多学生会出现漏掉*和()、括号不匹配等问题,出现错误。另外,学生在使用输出函数时也会出现错误。正确的语句是print('三角形的面积为:',s),很多学生会把引号当作中文字体,s前的逗号也容易漏掉[3]。学生根据自己的经验往往看不出来错误原因。这时教师让这个学生演示错误,其他学生一起来纠错。通过纠错的过程,很多学生会意识到编写程序的易错点,并从别人的错误中学习。这种错误资源的利用比教师苦口婆心的讲解让学生印象更深刻,从而提高了教学效果。
另外,在学习分支结构或循环结构的语句格式时,教师也可以给学生发一些改错的练习来加强学生对语句格式的理解。例如,学生在刚学习多分支结构if-elif语句格式后,容易把它和if-else语句的使用格式搞混掉。对于“比较3个数a,b,c,输出其中最大的数”这个程序,教师发给学生改错练习(如图4),让学生分析。很多学生能看出来else语句格式错误,原因是没有理清if-elif和if-else语句的格式区别。随后,教师可以进一步优化程序,引导学生分析elif和else语句本身就意味着排除了if语句的条件,因此a肯定不是最大的数,只需要比较b和c就可以确定最大的数,即elif判断条件为“elif b>=c:”。整个改错的过程可以提高学生阅读和分析程序的能力,为后续编写其他多分支结构程序打下基础。
图4 改错练习
错误是防不住的,能够发现错误并纠正错误往往能让学生对知识记忆更深。
Python编程是新的教育热点,它对初中学生来说是一个巨大的挑战。其实很多老师也是第一次接触Python,多少也会产生一种心里没底的感觉。Python的很多用法跟传统的C或C++等语言有很多不同,教师也是先学后教。教师在组织教学活动时结合教学要求和学生的学情,从自己作为一个学习者的角度出发,联系自己大学阶段刚学编程语言的心理和经历,在初中生的理解和认知水平基础上研究如何能更通俗有效地引导学生学习Python编程。在实践中,教师运用多种策略,尽可能让学生更好地学习Python编程,为后续学习打下基础。