李 勇
(广东省佛山市顺德区东逸湾实验学校,佛山顺德 528300)
随着人工智能技术的发展和广泛应用,越来越多的中小学开设了Python编程课程。虽然Python程序语法简单易读,也容易编写,并且具有丰富的第三方库,但在初中进行Python编程教学还存在如下问题:(1)学生容易出现厌学情绪:学生每周只有一个课时在机房学习编程,课后又无法进行额外的练习。随着课程的深入以及知识点的增加,大部分学生到了课程的中期就对编程失去了学习的兴趣,甚至出现厌学情绪。(2)学生不能灵活关联多个知识点解决问题:在Python编程教材中包含变量、数据类型、if判断语句、for循环语句、自定义函数等基础知识点,知识点相互独立且关联性不高,学生遇到稍微复杂一点的问题时,很难综合运用多个知识点编程解决问题[1-2]。
在课程论“顺序性、连续性和整合性”原则的指导下,重构Python编程教学内容,对整个学期Python编程教学内容设计了一个大项目,并把python基础知识点与一个一个关联性高的子项目结合起来。这样学生既能持续保持学习和创作的兴趣,又能提高学生运用python知识完成项目的实践能力。
基于游戏的项目式教学设计思路
项目式教学是将教学内容设计成一个个贴近学生生活环境的项目,引导学生进行项目分析、解决问题和完成项目。在整个教学过程中,教师起到引导作用,学生起到主体作用。基于项目式教学的一个重要特点是,选定的项目要接近学生的生活环境,是学生感兴趣的,这样才能激发学生学习的兴趣和创作欲望[3-4]。由于互联网和移动平台的快速发展,越来越多的中学生接触到移动设备和游戏,并在娱乐时喜欢玩一些益智游戏。因此,在教授Python编程内容时(如上图),重构了整个教材的教学内容,引入Pygame游戏模块,设计“猴子吃水果”大项目;并将该项目拆分为11个具有关联性的子项目,每个子项目对应一节课进行讲授。具体实施步骤为:项目确定、项目实施、项目探究、项目成果交流、项目评价[5]。
下面呈现基于游戏的Python编程项目式教学实践研究。
初二的学生在小学六年级就已经初步学习了Python编程语言,已初步了解变量、基本的数据类型、if语句和for循环语句等基础知识。在进行Python教学编程之前,教师先演示自主开发的“猴子吃水果”游戏,并告诉学生本学期的课程内容是利用Python语言编写游戏作品,从而激发学生的学习兴趣和创作热情。
教学过程中为了保持项目的整体性和连续性,引入Pygame游戏库,将课程内容进行了重构,设计一个“猴子吃水果”的项目,并将该项目拆分为以下11个具有关联性的子项目:
1.创建游戏窗口。在该子项目中,学生会掌握变量的基本使用,能正确的创建窗口,并在窗口中显示背景和猴子图片。
2.猴子左右移动。在该子项目中,学生会掌握if语句的基本使用:判断按下键盘某个按键,实现“猴子”的左右移动。
3.边界处理。在该子项目中,学生会掌握if语句多条件的组合使用;并能解决“猴子”左右移动时,移出窗口左右边界的Bug。
4.猴子跳跃。在该子项目中,学生自主探究使用if语句实现“猴子”的跳跃功能:猴子起跳后逐步上升,然后开始下降直到落地。
5.单种水果的随机位置下降。在该子项目中,学生会掌握列表和For循环语句的基本使用:列表的初始化、增加数据、遍历列表等。
6.多种水果的随机位置下降。在该子项目中,学生将巩固列表和For语句的使用,以及掌握字符串的拼接。
7.猴子“吃”水果。在该子项目中,学生将巩固if语句多条件的组合使用,以及掌握break语句退出for循环。学生通过水果的坐标和“猴子”的坐标,判断水果和“猴子”是否发生接触;如果二者发生接触,则表示猴子吃到水果。
8.游戏计分。在该子项目中,学生会掌握字典的基本使用:初始化、取数等。使用字典设置不同的水果具有不同分的数值。
9.根据得分控制游戏速度。在该子项目中,学生会掌握自定义函数的基本使用。当得分超过一定范围时,产生水果的频率会加快,水果下降的速度也会加快,“猴子”吃水果的难度也会加大。
10.游戏结束和重新开始。在该子项目中,学生自主探究使用if语句和变量,实现控制游戏结束和重新开始。当“猴子”吃到“炸弹”时,游戏结束。游戏结束后,按空格键可重新开始游戏。
11.自主创作。在该子项目中,每两位学生一组,进行游戏自主创作。每组学生可以优化“猴子吃水果”项目中未完善的功能;也可以在此游戏基础上开发出类似的大鱼吃小鱼的游戏;还可以用所学知识开发一个全新的游戏。
在项目式教学的项目研讨和实施环节,不能只重视学生的主体作用,而忽视教师的引导作用。每个子项目开始之初,教师先演示对应子项目的功能效果;然后引导学生对该子项目进行探究。由功能点引入新的知识点,讲授新知识点在项目中的运用[6]。
纯代码编程对初二的学生来说是一个极大的挑战,每节课学生除了需要完成程序的编写,还要调试程序解决错误。为了不让学生对编程产生“恐惧”,在前期的子项目中,教师应更多给与学生支架式的帮助。学生通过所学知识都能独立完成程序填空,并能运行程序展现作品[7]。在这个过程中学生会觉得编程没有想象中那么难,能深刻体验成功的喜悦,形成学习新知识的动力,甚至迫不及待的想完成一下个子项目。
随着学生编程知识的积累,在后期的子项目中,教师更多的是引导学生寻找解决问题的方法,提供技术指导,学生通过小组合作和自主探究完成子项目的创作。
在课堂教学中,教师除了提供技术指导外,还需走到学生中去发现问题,记录问题,对于大多数学生遇到的知识与技能问题,须重点讲解和复习。
1.过程性交流评价
每个子项目的作品完成后,都会有学生代表进行展示和交流,分享在创作过程中遇到的问题、解决思路等。教师从中选取典型的成功或者失败作品进行归纳和总结。
2.终结性交流评价
在整个大项目完成后,教师会给学生2周的时间,两位学生为一组自由合作完成一个小项目,完成后进行分享交流。评价以自评、学生评价和教师评价相结合的方式进行。
为了保证教学实施的信度和效度,通过班级人数,男女比例,上学期英语、数学和信息技术成绩优秀率、及格率、平均分三个方面来确定样本班。确定初二8班(学校尖子班)和初二11班为游戏项目python教学实验班,初二14班(学校尖子班)和初二17班为传统pyhon教学对比班。对8班和11班进行基于游戏项目的python教学,对14班和17班进行传统按教材进行python编程的教学。
1.学习兴趣分析
在编程教学时,持续保持学生的学习兴趣是非常重要的;学生的学习兴趣上来了,编程教学能达到事半功倍的效果。为此,在学期中期和末期对游戏项目python教学实验班进行了两次网络问卷调查(如表1、表2)。从表1和表2的数据可以得出基于游戏的Python编程项目式教学模式能持续保持学生学习编程的兴趣。
表1 11班期中调查问卷
表2 11班期末调查问卷
2.学习成绩分析
在学期中期和末期分别对以上四个班级进行了知识测试评估,测试数据如表3所示。
表3 期中和期末知识测试数据对比表
基于以上数据分析,持续保持编程兴趣的普通班11班的考核成绩明显要好于传统编程教学班级17班,前者的期末知识测试结果的及格率和优秀率,都比后者高出30%。对于尖子班的学生而言,他们本身的学习能力就比较强,虽然最后测试的结果8班对比14班的优势没有普通班对比优势大,但是也达到了12%左右。持续保持学生学习编程的兴趣,有助于帮助学生更好地掌握python程序设计知识点,能取得更好的教学效果。
3.作品效果分析
到了学期末期,两个游戏项目python教学实验班8班和11班的大部分学生都能独立综合使用python知识做出简单的游戏作品;部分学生还能从网上下载一些不完善的python游戏代码,进行调试和完善;使游戏作品能正常运行。而传统按教材进行python编程的教学的班级14班和17班的大部分学生只能编写一些简单功能的小程序。
在信息技术学科中运用项目式教学能提升学生分析问题、解决问题以及合作交流等能力。项目式教学对教师确定项目主题有一定的要求。项目不仅要有整体性,而且还要与学生的日常生活相结合,这样学生才能灵活运用所学知识解决问题,才能让学生体会到信息技术在生活中的重要作用。初中的Python编程是一门枯燥且实践性非常强的课程,学生在学习编程的过程中很容易失去兴趣,甚至产生厌学情绪。通过对Python的教学内容进行重构,引入学生感兴趣的游戏项目进行教学,激发了学生学习的兴趣和创作欲望,取得了较好的教学效果。在今后的信息技术教学中,将探索更多与学生日常生活相关的整体项目进行教学。