基于生活游戏,培养计算思维
——以《用Python实现“石头剪刀布”游戏》为例
2022-11-07曾伟锋上海市朱家角中学
曾伟锋 上海市朱家角中学
计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。在算法与程序实现单元教学中,应从生活实例出发,创设程序设计的活动情境,组织学生在解决问题的过程中,掌握一种程序设计语言的基本知识,使用程序设计语言实现简单算法。基于生活游戏的程序设计是将生活游戏体验整合到程序设计中,学生通过情境体验、任务分解、抽象建模、算法实现等一系列过程解决实际问题,培养计算思维。下面,笔者以《用Python实现“石头剪刀布”游戏》一课为例谈谈基于生活游戏培养计算思维的实践体验。
● 情境体验
情境体验激发学生学习积极性,为计算思维发展提供思维材料,提高学生利用计算思维解决实际问题的意识和能力。游戏情境能够激发学生的学习兴趣,使学生乐于参与,同时能够调动学生已有的经验,使其在情境中思考问题。
教学片段:同桌之间玩“石头剪刀布”游戏,详细描述游戏规则。
总结游戏规则:两个玩家出示自己心中想好的手势。如果双方出示了一样的手势,就是平局,需要重新出示手势,直到手势不同分出胜负〔石头>剪刀(石头胜利),剪刀>布(剪刀胜利),布>石头(布胜利)〕。
这个小游戏学生都熟悉,因此他们参与游戏的积极性很高,而且能够详细描述出游戏规则。这个环节以生活中最常见的猜拳游戏引入,增强课堂教学的趣味性,调动了学生的学习积极性。把生活游戏转化为计算机游戏,增强了学生的探究欲望,提升了学生对程序学习的主观能动性。学生能在游戏过程中提炼出明确的游戏规则,这是用计算机可以处理的方式界定问题的前提,是从具体到抽象的重要过程,为接下来的学习做了良好的铺垫。
● 任务分解
化繁为简,培养学生计算思维任务分解的意识和能力。将问题分为较小、可管理部件的过程称为分解,分解有助于解决复杂的问题并管理大型项目。任务分解是明晰如何拆解一个任务,把问题分解为若干部分或步骤,同时厘清各个部分的属性。软件开发是一个复杂的过程,因此能够将一个大型项目分解为多个小项目是至关重要的。
教学片段:引导学生分步骤描述“石头剪刀布”游戏过程,这也是用自然语言来描述游戏算法的过程。
①双方准备好要出的拳;
②亮拳;
③如果双方出拳相同,显示“平局”,回到步骤①开始执行,否则进入步骤④;
④根据双方出拳,判断胜负〔石头>剪刀(石头胜利),剪刀>布(剪刀胜利),布>石头(布胜利)〕;
⑤本局游戏结束。
学生在教师的引导下将猜拳游戏分解为小的步骤,有助于计算机编程实现,这也是算法每一个步骤确定性和可行性的充分准备,是算法的自然语言描述。很多学生对将实际问题转为程序实现感到困难,究其原因是缺乏对具体问题的细致解读,缺少问题详细分析的过程。问题拆解,化繁为简,为以后完成复杂的程序提供了一种问题解决的思路。
● 抽象建模
计算思维的本质是抽象,计算思维中的抽象需要依据计算模型对现实世界中要处理对象的属性、规则、方法进行抽象和形式化表达,为构建计算机世界提供依据。对中学生而言,从熟悉的形象、具体的思维转向抽象、复杂的计算思维,难度和跨度较大。这就需要教师在教学的过程中呈现思维的过程,为学生搭建思维支架,帮助学生搭建具体问题到抽象的模型,以实现计算机自动解决问题。同时,在任务分解的基础上,形成相关性的问题链,以引导和促进学生的思维活动。通过创设问题情境可以启发学生提取先验知识,概括问题关键特征并对问题进行形式化表达,将其抽象为计算机能够“理解”的具体的步骤,使其抽象特征能力得到发展。
从自然语言的描述到程序语言的表达,学生缺少实践的机会,难以自主完成程序设计。而在问题的引导下,学生能够把实际问题用课本中学到的程序设计知识描述出来,实现问题的形式化表达。软件开发是人们使用计算机语言将现实世界映射到计算机世界的过程。教师引导学生尝试将一方玩家由人变成计算机,理解人的行为怎么变为计算机的行为。学生通过问题的引导,结合已有信息技术学科知识,逐步将游戏情境抽象为计算机能理解的执行步骤。学生独立运用程序解决实际问题比较困难,需要教师的引导和帮助,也需要通过实践提升程序设计能力和自信心。教学片段如上页表所示。
①双方准备好要出的拳问题1:人出的拳如何输入到计算机?通过输入语句:player=input(“请出拳:(石头、剪刀、布)”)问题2:计算机如何随机出拳?使用随机函数:quan=["石头","剪刀","布"]computer=random.choice(quan)②亮拳 问题:计算机和玩家都出了什么拳?使用输出语句显示出来:print语句③如果双方出拳相同,显示“平局”,回到步骤①开始执行,否则进入步骤④问题1:根据语义描述,属于什么程序结构?循环结构。问题2:计算机程序是如何描述出拳相同的,即循环的条件如何用表达式来表示?player==computer或 者 (player == “ 石 头 ” and computer == “ 石 头 ”) or(player == “ 布 ” and computer == “ 布 ”) or(player == “ 剪 刀 ” and computer == “剪刀”)都是可以的问题3:循环体的内容,碰到出拳相同要执行哪些语句?依次执行:显示“平局”、步骤①、步骤②分析:判断胜负已经有个前提,即双方出拳不同④判断胜负images/BZ_46_1320_2321_1922_2689.png如何根据出拳比较得出结果?将实际的6种情况转化为Python程序代码。以第1种情况为例:变量player表示人出拳,变量computer表示电脑出拳。如果 人出石头 计算机出剪刀结果人获胜if(player =="石头" and computer == "剪刀"):print("人获胜")
● 算法实现
算法实现是按照特定的问题及规则,利用编程设计出一系列的指令,以自动实现该问题的解决。学生信息技术学科基础差异比较大,可能会产生如语法错误、中英文混合输入等方面的基础问题,在有限的课堂时间内,教师来不及一一指导。因此在教学中,教师可且学且教。学,是在教学活动中给学生留有更多的思维空间和动手实践机会;教,不是教师一个人单独讲解、辅导,还有学生教学生。学生完成石头剪刀布的计算机游戏程序,体验到游戏的过程从我和同学猜拳变成了我和计算机猜拳,经历从实际问题到程序实践的完整过程,获得运用学科知识解决身边实际问题的经历和体验。学生围绕特定任务在学习共同体中共享算法设计过程,互助实现编程,以此实现学科知识的意义建构和学科思维的深度培养。
计算思维教育不是知识接受,而是思维发展;计算思维教育不是孤立的“代码编写”,而是过程性的“程序体验”。本课利用学生生活中最常见的小游戏——石头剪刀布来开展教学,帮助学生认识身边的实际问题是如何利用计算机来处理的,有利于学生理解现实世界映射到计算机实际的过程。通过“情境体验=>任务分解=>抽象建模=>算法实现”这一过程将学生的生活经历和学科思维、学科知识相结合,让学生感受到计算方法与自动化实现的真实存在,在实践体验程序设计每个环节的过程中内化计算思维。