多变的“棋盘麦粒问题”——探索FOR循环与WHILE循环同一主题教学研究

(整期优先)网络出版时间:2021-06-30
/ 3

多变的“棋盘麦粒问题”——探索 FOR循环与 WHILE循环同一主题教学研究

王兰芳

绍兴市柯桥区鲁迅外国语学校 312030

【引言】

2020年9月,浙江省中小学义务教育阶段信息技术学科教材全部更新,教学内容颠覆,紧跟时代,其中八年级第一学期整册教材主要围绕Python语言,引领学生跨入程序设计的世界。

第二单元Python程序的基本结构主要教学内容是顺序结构、分支结构、循环结构。无论多么复杂的问题,多么功能强大的程序,皆由这三种结构组合而成。教材贴近生活,选取了一些与学生生活、学习密切相关的例子,如“海伦公式”,“简易计算器”,“棋盘上的麦粒数”,“帐号密码登陆”,“猜数游戏”等,引导学生能初步学习理解这三种基本结构程序的编写,体验编程的具体每一个过程。

在第九课《for循环的应用实例》中,因本课是for循环的综合应用,在第八课学生掌握for循环语句的基本格式后,本课主要是以棋盘上的麦粒数为例题,培养学生分析归纳的能力,综合掌握for循环结构,同时让学生直观感受到计算机处理大数据量的优势。

但第十课《循环结构——while循环》课本又以另一个例子作为载体进行while循环的教学,本人认为可以延续第九课的棋盘上的麦粒问题,将while循环与for循环延伸对比综合应用,从中学生透彻理解二种循环结构的异同点,真正让学生体会一题多解的魅力。本文将从“多变的麦粒问题”,探索循环结构中for循环和while循环的不同应用。

【正文】

  1. 留有悬念,激发学生兴趣

《for循环的应用实例》是在学生了解for循环的基本格式和执行流程后,帮助学生能够使用for循环语句编写简单的程序。本课教学难度较大,教学目标是学生能使用for循环编写较为复杂的程序,解决有一定难度的数学问题。

棋盘上的麦粒是一个古老的传说,题目描述如下:在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人——宰相:西萨·班·达依尔。国王问他想要什么,他对国王说:“陛下,请您在这张棋盘的第1个格子里,赏给我1粒麦子,在第2个格子里给2粒,第3格子给4粒,以后每一格子的麦粒数都是前一格的二倍。请您把这样摆满棋盘上所有的64格的麦粒,都赏给您的仆人吧!”国王觉得这要求太容易满足了,就命令给他这些麦粒。当人们把一袋一袋的麦子搬来开始计数时,国王才发现:就是把全印度甚至全世界的麦粒全拿来,也满足不了那位宰相的要求。那么,宰相要求得到的麦粒到底有多少呢?

从引入课题开始,学生已经兴趣满满。传统的寓言故事将用现代的程序设计语言去解决,将传统与现代结合,已经为学生打开了一扇新的窗户。学生的兴趣浓浓燃起,一直想知道的答案将通过今天的程序编写亲自解开,故我们在设计教学主题时,一定要激发学生兴趣,要犹如一部电影留有悬念,让学生在课堂上亲自解开谜题,参与到整个课堂环节中,在探索中无痕迹地吸收知识。本课中教师留下了一个小小的悬念,问本故事利用Python语句进行编写,你认为大约需要多少条语句呢?大部分学生都认为解决这么庞大的数据,处理这么复杂的问题,程序必然非常复杂,当得知最终可以用简略的五至六行语句编写得到结果时,课堂上所有的学生不敢置信,此时悬念产生,师生间将用一节课时间进行知识的探索,解决悬念。悬念让整节课变得趣味十足,悬念让学生不再置身事外,成为课堂的主动探索者。

  1. 巧用表格,分析归纳问题

棋盘上的麦粒问题,虽是寓言故事,但更是数学问题。故要引导学生从数学角度来分析问题。结合本次主题,程序设计的过程如下示:

理解题目(转化为数学知识))————分析归纳问题(可利用表格数据)————绘制流程图————编写代码,调试代码

棋盘上的麦粒问题引申至循环for结构时,需要课堂上教师从数学知识的视角出发做好引导工作。教学中设计二个变量p(当前格子内摆放的麦粒数)和累加变量s(1至I格棋盘内总的麦粒数。教师利用以下表格帮助引导。

60dbfebc49c15_html_e445bf4cbfb9b161.png

根据表格,引导学生仔细观察,变量p值和s值的变化规律。设计以下几个问题帮助学生归纳分析变量的表达式。

问题(1):共摆放几格棋盘?
问题(2):每格棋盘内需要做哪些事?

问题(3):能说出变量p和变量s的值如何变化?

课堂上问题的设计不要过于抽象,教师要擅于用自然语言去启发学生思考,此时对于问题(1)学生自然回答共存放64格,即对应表格的64行,每行即一格,延伸至for循环中即相当于一次循环。故利用问题(1)很好解决了本次课题中共循环64次,每次即一格棋盘也为表格中一行。直观形象地让学生理解了循环的次数概念。

而问题(2)的设计更一步让学生理解每行处理二个变量s和p值,即延伸至循环结构内,每次循环处理二条语句s和p的表达式。

问题(3)直接将循环内的关键语句用表格的形式来引导得出结果,学生自然发现了p值的变化规律为当前行即第i次循环内的p值为上一行即前次循环p的二倍。此时学生能独立得到二条语句: s=s+p ;p=2*p

棋盘麦粒问题中最为核心最为关键的循环结构框架利用表格法学生轻松得出以下程序段:

60dbfebc49c15_html_b1a37ebee88e6384.png

解决了最难的程序块后,再引导学生根据流程图的设计过程设计python语句已经是顺理成章。

60dbfebc49c15_html_3782279d8d1753d1.gif














  1. 变一变,进一步启发学生思维

教材中棋盘麦粒至此基本解决了主要任务,但本人认为我们仍然可以借助这一课题延伸下去,可以进一步去启发学生思维。棋盘麦粒问题可以充分借用,将之变为最大化的载体来承载我们的教学内容。

比如前面的p=2*p是否有其他教学规律呢?此时可以再次借用表格,启发学生仍然从数学视角出发找出新的规律得到新的变化语句。学生立刻发现p值为2的幂次方。与循环变量i结合即p=2**(i-1)即p为2的(i-1)次方,至此学生独立完成程序段。

60dbfebc49c15_html_3446141686fa3a49.png

作为教学引导者,教师要引导学生将数学思维转化为编程的计算思维,在Python编程教学中至关重要,也是最为主要的突破口。解决了p值用2的幂次方表示后,再次引导,问可否取消一个变量的引用?一而再地激发学生思考,将程序不段简化,利用最简略的程序语句解决复杂的问题,至此课堂开始的悬念最终解开。

本题最简略的程序语句如下:

60dbfebc49c15_html_81f79edaa138ded0.gif






  1. 再次变形,引入新知

第十课《循环结构——while循环》主要教学内容是while循环语句和循环控制语句的使用。教材中引用了其他几个案例作为载体帮助学生理解while循环语句,但本人认为完全可以从第九课棋盘麦粒问题变化来引入while循环。即用同一个主题贯穿循环的二种结构:for循环和while循环,又可以因为同一个主题让学生发散思维,完全掌握二种循环的异同点,真正举一反三,融会贯通。

如引入阶段可以改编前面的棋盘麦粒问题为“棋盘麦粒悔棋版”,题目改编如下:国王看着每格的麦粒数越来越多,若放到某格的麦粒数超过1亿粒时(这格麦子仍然给丞相),则直接反悔,不再给任何麦粒,问此时丞相共得到多少粒麦子?
学生在第九课学习的过程中,已经能用自然语言描述算法的过程。本课题中启发学生描述悔棋的思路,学生描述如下:如果某一格棋盘上p的值大于1亿时,退出(结束)整个循环。此时,借助课本中关于break和continue语句的知识,循环控制语句也称为之为跳转语句,功能即改变循环语句的执行顺序。在Python中,循环的控制语句主要有break和continue语句。

breack语句功能:跳出当前循环,不再判断执行循环的条件是否成立。continue语句功能:结束当前的当次循环,但不跳出当前循环,继续判断循环的条件是否成立。

根据书本的新知识,分析break和continue语句的不同,则新设语句

60dbfebc49c15_html_82473b0500ac83c3.gif60dbfebc49c15_html_295cf0a4ecbc7796.png






问:该分支结构的功能是什么?该语句放于何处?

学生积极思考,得出该分支结构功能用于国王悔棋,当某一格大于1亿粒时则结束放置麦粒。

程序语句如下:

60dbfebc49c15_html_3262806b050603ce.png

程序教学中教师尽量不要只局限于冰冷的程序语句,尽量在分析时使用丰富的自然人类语言去阐述问题,同样帮助学生能利用自然语言解释自己的程序语句。本课题即利用教师的自然语言多次引导,促使学生在借用课本自学知识的基本上能巧妙地利用break语句完成了棋盘麦粒悔棋版的设计。

但此时主要结构仍然是for循环结构,while循环和for循环的主要不同之处在于执行之初不确定循环次数。while循环称为条件循环又称无限循环,在未明确循环次数时,需要根据条件控制循环时,采用while循环。在前面借用break语句悔棋退出for循环中,实际上亦可理解为事先不确定摆放64格棋盘,处理的棋盘格数由p值即每格的麦粒数来决定,那么提出问题:

  1. 在什么条件下一直循环摆放麦粒?

  2. 循环条件主要由哪个变量值来决定?

学生理解了while循环的程序基本结构后,立刻找到关键点变量p,由p值来判断循环的条件执行。

八年级上第二单元的第九与第十节课的教学内容for循环和while循环,借用同一个课题棋盘麦粒问题,将二块教学内容巧妙地融合,在课题研究过程中充分展现了程序语言之美,功能之强大。

60dbfebc49c15_html_66eb4da8048cbb36.gif








【小结】

浙江省新教材紧跟时代,此次改版基本上脱离之前传统意义上的工具式软件教学,对于我们一线信息技术教学提出了更大的挑战。特别是八年级Python编程教学中,我们教育工作者首先要吃透教材,完全了解每节课程的教学目标,但更要掌握学情,分析学情。在第一届新教材下,我们的学生基本从未接触过编程语言,部分学生连三种算法结构的掌握都存在着不小的困难。他们难以理解循环结构是如何运行的,更不要说单独设计循环结构。故本人认为不是题目越多越好,如果能将一道题目不断变形,不断延伸,不断挑战学生思维,那么学生的编程思路在教师的引导下一定会不断地拓展。本次研究是作者本人在课堂上的尝试,共利用三个课时的安排将八上的第九课与第十课利用寓言故事棋盘上的麦粒贯穿教学,学生在课堂上一直表现活跃,当悬疑最终解决时,他们惊叹不已,对于程序能高效解决如此庞大的问题,能解决如此大的数据量,学生对于程序设计的兴趣才真正地被激发。这也是我们以后作为一线教师应该不断地探索的方向,如何高效的进行教学设计,如何一题多解,如何举一反三,如何设计一个个可以跳一跳解决的教学任务,让学生真正感受到高效的课堂魅力!