通过上一次亲子编程课是帮助南瓜简单入门《不用电脑,一张纸、一支笔带孩子入门编程》,让南瓜了解到了程序就是一条一条的指令(让电脑看得懂的命令),这些指令需要通过我们人类的大脑对目标进行分析之后进行编写,编写的指令最终需要运行起来。
这次南瓜爸爸用一个“找目标”的小游戏来教南瓜进一步了解如何去编写一个程序。首先会介绍一个使用简单指令达到目标的方法,后面会在前面的基础上介绍更进一步,编写一个更加通用的程序出来。
来来来,不需要电脑,用纸和笔来进行一次编程体验吧!
编写第一个程序
先摆今天的主角——找目标地图,地图的左侧是方向指示,分别用英文标识上下左右(主要也是为了帮助南瓜记忆单词),右侧是5X6的格子地图,在格子里将会放上 target (目标)和 obstacle (障碍物)。
我们的代码在编写的时候需要遵循一定的格式(在实际编程中,每种编程语言都有自己的独特的代码编写规范,需要严格执行),一行一个指令,执行的时候也是自上而下按序运行。
这个任务当中我为南瓜制定了一套简单的编程语言,像下面这样
向左移1格计做:L1
向右移1格计做:R1
向上移1格计做:U1
向下移1格计做:D1
这套语言对于5岁的南瓜来说很好理解和应用。
好了开始:
首先编写第1题
这个程序的目标是:控制小人在地图中找到 target (汽车)
该如何编写指令呢?
南瓜一遍用手指头比划,一遍念着移动的指令,很快就出来结果了,这个不难对吧:
R1
R1
R1
R1
R1
U1
U1
U1
编写完成,然后运行,bingo!正确!
南瓜爸爸把 target 换了一个位置,让南瓜再来一遍加深印象。然后进入下一题:
2 绕过障碍物找到 target
南瓜在地图上随便放了几个障碍物,来增加一点点难度:
对于南瓜来说这个也不算难,关键是在编写每一条指令之前需要在他的小脑阔里演练一遍,哈哈,这个过程其实更重要:编程是需要对整个目标进行分析的!
南瓜一遍口里念念有词,一遍用指头指指点点,很快也有了答案:
R1
R1
R1
R1
U1
R1
R1
U1
U1
L1
运行,嗯,没有错误!
至此,今天的第一阶段的编程任务完成!实际上编写代码也没有很难嘛,对不对?
不过,我们也会发现,这样的代码仅仅能够处理障碍物和目标固定在特定位置时的情况,如果他们变换了位置,这个代码就只能再重新编写一次,这表示啊,代码的通用性不强、适应性不够。那么下面我们就再进阶一步,看看如果写一个更加通用的代码。
进阶:编写通用的代码
今天的进阶练习中,我们简化任务的难度,仅做没有障碍时的找 target 编程。
如果要让程序适应性高,那么抽象程度就需要越高,也就是所谓的需要“建立模型”,即“建模”。南瓜爸爸在设计这堂课内容的时候比较担心南瓜对于这么抽象的东西听得懂吗?
好了,我把任务告诉了南瓜,先让他思考了一下,然后慢慢引导到这样的思路上面:
小人按照顺序走完所有格子,指导找到target停止。
小人从地图左下角进入,在 前进的方向上(右) 一格一格移动,每移动到一格就就需要判断2个情况:(1)当前格子是否有 target 如果有那么停止并完成任务;(2)当前格子是否已经达到边界,如果是,向上移动一格,并且将 前进的方向 设置为之前的反方向。如此一格一格走下去,直到找到target结束。
行进过程像下面这个图:
那么我们精简并整理一下格式:
Step 1 :
小人 前进方向 设置为 右
Step 2:
小人按照 前进方向 前进1格,然后:
{
判断 这一格是否是 target : 如果 是 那么 停止
否则 判断是否到达边界: 如果 是 那么: 向 上 前进 一格 ;并把 前进方向 改为当前方向的 反方向
}
Step 3:
不断重复第二步,直到找到 target
其中大括号 { } 中间是代码段,依次执行。
请注意南瓜爸爸整理出这样的编码格式,它更加接近于一般的编程格式规范,结构清楚,一目了然,在这里让各位爸妈有个初步的了解即可。
由于南瓜认识的汉字并不多,因此主要还是在帮助他初步建立一个所谓的“模型”的思维,并不注重对于的代码本身的撰写。经过南瓜爸爸的帮助和引导,南瓜基本上完成了上面代码的改进。
好啦,这次的编程任务结束了。通过这次的南瓜爸爸亲子编程课,南瓜仅用笔和纸就可以编写一个简单的避开障碍找目标的程序,并通过进阶的抽象思维,对寻找过程进行初步的“建模”,编写了一个在无障碍的格子中找到 target 的通用程序。在这个程序中实际上已经暗含了编程常见的几个概念,比如变量、判断、循环,下次课将会一边介绍这几个基本概念,一边进一步改造我们的程序,让它更像一个计算机程序。
往期内容回顾: