编程故事化教学的情境与环节设计
吴加明
编程对于广大中学生来说无疑是块硬骨头,如何做到因材施教、有效教学,这考验着一线信息技术教师自身的专业知识储备、教材文本研读、教学案设计、教学组织实施等教学基本功和综合素养。故事是人类文化的基本元素和重要标识,具有独特的影响力和感召力。故事和编程两个看似毫不相关的词语,让人联想到:一个情绪化、张扬,一个理性、内敛;一个讲究气氛渲染、情节冲突,一个需要逻辑思维、思路严谨。笔者在教学必修模块1《数据与计算》的“算法与程序实现”时,对“分支结构与if语句”有关项目学习活动的教学环节尝试了“故事化”情境设计,力图做到形式与内容的完美统一。
● 故事情境:古城寻宝
寻宝是个比较经典的话题,总给人一种神秘感,其结果的不确定性会给人带来无限的遐想,让人跃跃欲试。笔者所在城市泉州,是我国历史文化名城之一,历史悠久,享有“海上丝绸之路起点”“东亚文化之都”“世界宗教博物馆”等美誉。其地方文化特色凸显,人文底蕴深厚,文物及旅游景点众多,有特色街巷,寺院庙宇星罗棋布。把项目活动设计放在有浓郁闽南传统特色古城这一空间背景下,恰如其分,项目以“古城寻宝”为题,在项目中设计了三个主题活动,主题名称分别是体温测量、通关密码和探寻宝物,使项目有较完整的故事结构,既有剧情的层层推进,又有知识内容的螺旋上升,形成明暗两条主线链条的有机融合。
● 活动环节1:体温测量
本环节让学生通过编程模拟解决实际生活中的一个场景问题,了解分支结构在日常学习生活中应用的普遍性和广泛性。当今的智能设备,极大地方便了我们的生活,其智能最直观初浅的理解就在“如果…就…”的简单逻辑里,智能机器需要按预设的程序对各种情况做出判断,并做出相应的反应。例如智能空调,如果室内温度高于32度,就自动打开空调。又如,使用无人机空中侦察古城寻宝路线,如果无人机接收到指令,就会做出相应的动作。可以看出条件判断非常重要。理解并掌握Python语言的if分支语句的格式与应用,这是整个项目活动完成后需要达成的最低学习要求,在此过程中,还需要了解与条件密不可分的关系运算、关系表达式。同时,进一步领会体悟Python语言的书写特点、基础知识、集成开发环境及调试流程等。
知识要点:if语句及应用、关系运算。
活动要求:在新冠疫情防控常态化背景下,我们进入公共场所,如车站、商场、电影院、景点等,都需要出示健康码,并接受现场测量体温等,体温正常者(不高于37.3摄氏度),才被允许入内,体温异常者,将被拒绝。请同学们利用Python编写一段程序,实现功能:①输入一个体温数据。②对输入的数据进行比较判断,如果小于或等于37.2,輸出“体温正常”,否则,输出“体温异常”。③结束。
知识连接:
(1)if语句,其书写格式如下:
if 条件:
语句组1
else:
语句组2
语句组3
Python用缩进来标明成块的代码,体现语句之间的上下级关系,对缩进有很严格的要求,同级别的程序行要缩进并对齐。例如,以上程序中if与else要对齐,“语句组1”到“语句组2”要缩进并对齐。条件后面的冒号也是if语句的组成部分,不可或缺。
分支结构程序的功能是:
①如果条件表达式成立(值是真True),那么执行“语句组1”的程序段。②否则(值是假False),就执行“语句组2”。③不论条件成立与否,判断完成后都继续执行“语句组3”。因为“语句组3”与else对齐。
(2)关系运算。
分支语句中的条件(条件表达式),一般称为关系表达式。关系表达式是用关系运算符连接起来的式子。常用的关系运算符:==、!=、>、<、≥、≤。当关系表达式成立时,值为真(True);当关系表达式不成立时,值为假(False)。逻辑型数据有且仅有“真”和“假”两个值,关系运算的结果一定是逻辑型。
● 活动环节2:通关密码
该活动不管是故事情节方面还是知识内容方面,都是在“活动环节1”基础上的自然演进,设计合理,将条件判断从单一增加到两个,从而引入逻辑运算的学习内容。学生对用户名和密码问题有浓厚的兴趣,可以快速激发学习的积极性和主动性,用户名和密码也是人们互联网生活方式必不可少的,如学生进入“安全平台”“综合素质信息管理平台”等都需要正确的用户名和密码。本活动进一步通过问题引领,大胆猜测,小心验证,初步构建从生活实例中提炼形成程序设计语言能接受处理的算法模型,并做到实践操作、编程实现。
知识技能:逻辑运算。
活动要求:通过第一关的体温测量后,现在我们来到了古城门,进入第二关,需要输入通关密码,即输入用户名和密码。请同学们利用Python编写程序,实现功能:①输入用户名。②输入密码。③对输入的用户名和密码与预先设定的值(每个同学用自己的姓名作为用户名,用“202011+座号”作为密码)进行比较,当二者同时正确时,输出“欢迎来到古城!”,否则,输出“对不起,输入有误,无法进入!”。④结束。
知识连接:逻辑运算——and、or、not。
逻辑运算符一般和关系运算符结合使用,如10>6 and 15.6>20,10>6是成立的,结果为True(真),15.6>20不成立,结果为False(假),所以整个表达式的结果为False,即不成立。看一个生活实例:手机要上网,最起码需要满足两个条件,一是保证手机电量充足,二是要有网络信号。两个条件必须同时具备,这种情况就是逻辑与运算。再如中考体育的球类项目,大家可以在篮球、足球和排球中三选一,这就是逻辑或运算。
● 活动环节3:探寻宝物
能够从问题本身或业务逻辑提炼出解决方案,并且用代码去实现,编程教育的实质内涵是:现实世界的问题→抽象出解决方案/建模→编程语言表达。编写代码只是最后一步,前面两个步骤更考验学习者的底层思维能力。本活动是前面内容的延伸,是整个“古城寻宝”项目活动的终极目标。对应的主要知识要点是随机函数和多分支语句,难度中等。为了模拟现实世界中寻宝的随机性、不确定性,这里需要导入random模块来产生一个随机数,这也是编程教育绕不开的一个话题。例如,抽奖小程序、课堂叫号提问程序、义务教育入学电脑派位软件等,其基本原理都离不开随机数这个概念。
知识技能:导入模块、随机数和多分支结构。
活动要求:进入古城后,开始探寻宝物,宝物分别有宝剑、盔甲、金币等,我们统一给每样宝物做个编号并约定,1代表宝剑,2代表盔甲,3代表金币,0代表空。请同学们利用Python编写程序,实现以下功能:①在0~3四个数字中随机产生一个整数。②对获得的随机数进行比对,并输出编号所代表的宝物名称。如随机数是1,则输出“恭喜你!你寻到的宝物是:宝剑”。③结束。
知识连接:
(1)导入模块。
Python提供了强大的模块支持,不仅Python标准库中包含了大量的模块,还有大量的第三方模块,通过模块可以极大地提高开发效率。例如,导入random模块,用于生成随机数,可以写成:import random。
(2)随机模块。
random模块,用来利用系统产生随机数,应用随机函数是编程中的常见现象。
①random模块的choice函数,作用是返回一个列表,元组或字符串的随机项,如random.choice([0,1,2,3])#得到0~3这四个数字中的随机一个数。
②random.random()#生成0~1的随机浮点数,较常用,可以做变形处理。
(3)多分支结构书写格式。
if 條件1:
语句组1
elif 条件2:
语句组2
……
elif 条件n:
语句组n
else:
语句组n+1
故事化教学,甚至是角色扮演教学在文科学科的教学活动中较为常见,可以让学生在较短的时间内快速融入预设的学习情境。“古城寻宝”项目活动通过巧妙构思,用故事化设计编程教育,做到相关活动由易到难、由浅入深,环环相扣,一气呵成。通过尝试创新教学环节方式,让“以学生为中心”“追求理解的教学设计”等教学理念有效落地,生根发芽。
苍山点题
程序设计教学首先要考虑趣味性,尤其是在学习的起始阶段,培养学生的兴趣,同时也能降低算法理解的难度。因此,选题要尽可能联系学生的生活实际,提高学生的认同感。这也是近期选题我们的一大宗旨。
第一篇文章,把项目学习与趣味编程结合。在程序设计教学中允许学生“眼高手低”,主要在培养学生的计算思维上下功夫,而不是在编写代码操作上多使力。在学习过程中建议学生在相关代码上进行修改,降低代码编写的难度,加快输入速度,提高学习的成就感。受课时和上课周期等现实因素的制约,在进行项目设计时尽量选择“短平快”的“微项目”开展教学活动,增加教学的灵活性,提高了课堂的实效。
第二篇文章,教师开始设计的是项目学习,因为故事化过于强大,相对弱化了项目的创意设计、作品生成,所以我们建议其改成了故事化教学,让故事情境、情节与学习活动环节相一致,更好地突出了教学设计的特色。
另外,随着项目学习在课堂中的广泛使用,我们要防止项目的泛滥,对项目学习的特征要不断校准,至少不能让项目学习失去个性化的创意、规划、设计及作品的生成与交流,即使作品是一个结论、观点,也是有益的。