最新消息:

Scratch:海龟绘图(七)——初识函数

Scratch 少儿编程 2524浏览 0评论

友情提示:视频教程观看时请手动设置清晰度。

今天我们要探讨的核心问题是程序设计中的一个非常重要的内容——函数。函数的定义和示例已在本期的前导部分讲过,这里不再赘述。直接进入今天的任务:如何像下图中那样,一口气画20个边数各不相同的多边形?

Scratch:海龟绘图(七)——初识函数

画正多边形的程序前面的课程已经讲了(点此复习),我们得到了如下的代码

 

Scratch:海龟绘图(七)——初识函数

仔细观察上述代码,我们发现,真正绘制正多边形的操作都是在循环部分完成的。那么我们能否把这个循环部分“抽取”出来,变成能独立完成任务的一块单独的“积木”呢?或者说,我们能否定义一个能绘制正多边形的“函数”呢?如果能,不就离我们要完成的任务更近一步了嘛!

答案当然是肯定的。但还有一个小问题需要解决。

回顾前导部分的函数定义和示例,我们发现定义函数时,一般需要给函数提供一些“数据”,告诉函数到底该计算“”的平方根,或是在屏幕上显示“什么”字符。这个“几”和“什么”,就是我们提供给函数的“始数据”,行话叫“参数”。函数只有获得了这些“参数”,才能按照我们的需要做好它的分内之事。

回到我们的“正多边形”函数。虽然绘制正多边形的操作涉及很多因素——边长、旋转角度、边数等,但实际上整个绘制多边形的循环部分都是由一个变量在“操纵”(见上图红框),那就是“边数”。只要给定边数,我们就能让程序自动绘制出一个尺寸合适的正多边形。其实想想也很容易理解,如果不告诉函数多边形的边数,函数怎么知道该画几边形呢?!

有了这些分析,下面来看具体操作:

Step1: 从积木区深紫色的“更多积木”部分,点击“制作新的积木”按钮,弹出“新建积木”对话框(如下图);

Scratch:海龟绘图(七)——初识函数

Step2: 在“新建积木”对话框点击“选项”前的小三角,弹出新建积木所需选项(如下图);

 

Scratch:海龟绘图(七)——初识函数

Step3: 在紫色积木的标签中输入“绘制正”(如上图1⃣️);

Step4: 在“选项”中点击“添加一个数字参数”按钮(如上图2⃣️);

Step5: 将“数字参数”的名字改为“N”(如上图3⃣️);

Step6: 在“选项”中点击“添加文本标签”按钮(如上图4⃣️);

Step7: 在数字参数后的文本标签中输入“边形”(如上图5⃣️);

Step8: 最后点击“确定”按钮(如上图6⃣️),就在积木区得到了一块“绘制正1边形”的积木,同时在代码区得到了一块小房子形状的、写着“定义‘绘制正N边形’”的积木(如下图)。

 

Scratch:海龟绘图(七)——初识函数

这个“小房子”,就是我们定义函数的开始(行话叫“函数头”,外国话叫“header”)

鉴于我们之前已经搭建好了绘制正多边形的代码,直接把那些代码“拖”到小房子的下面即可,形成函数体”,外国话叫“body

Scratch:海龟绘图(七)——初识函数

拖过来后,记得把函数体中的变量边数”,替换为函数中的新变量“N”(如上图)。如果觉得函数运行不够快,可以将“等待0.5秒”这块积木移除。

至此,函数(新的积木)已创建完毕,下面就来用一下试试吧!

Scratch:海龟绘图(七)——初识函数

把积木区我们新建的绘制正1边形”积木拖至“主代码”的最下方,并把参数“1”替换为我们之前定义的变量“边数”。

点击“绿旗”运行。Wow!效果一样很好对不对?而且,看看我们现在的代码,变得多么简洁,只用一块积木就实现了“绘制正N边形”的功能!

现在我们拥有了一块功能如此强大的积木,再来完成本课的目标就会轻松许多了。

Scratch:海龟绘图(七)——初识函数

我们再来仔细观察一下我们要绘制的图形——从最上边开始,先是一个“三角形”,然后是一个“正方形”,然后又是一个“正五边形”,再接着是“正六边形”、“正七边形”、……

经过这么一分析,我们的脑海中大概应该已经有了思路——使用一个循环,边数从“3”开始,不断增加,一层层的绘制“正多边形”就行了。

说干就干!

我们先将开始时的边数设为“3”,使用一个计数循环(先来10次试试)来多次使用我们的“绘制正N边形”积木(行话叫“调用‘绘制正N边形’函数”),每次使用后,给边数“加1”。得到代码如下图:

Scratch:海龟绘图(七)——初识函数

这里,我们不得不再次感叹,使用函数后的代码“可读性”有了很大提高,因为我们把绘制正N边形的“细节”,全部“隐藏”在了定义积木的过程中。积木的使用者不用关心这个积木到底是怎么画出正多边形的,他们“只管用”就好了!

点击“绿旗”运行,得到了我们的最终结果……

Scratch:海龟绘图(七)——初识函数

哦不!这是什么?怎么会这样!我们的思路完全正确啊,程序的逻辑也无懈可击,为什么得到的结果却事与愿违?

对于产生这个结果的原因我今天不做过多分析,留给大家进行分析思考,看看您能不能找到问题的根源,并着手把问题解决掉呢?

提示:仔细对比错误图形与正确图形的差别。

项目小结:

在今天的项目中,我们:

  1. 学习了积木区深紫色的“更多积木”部分,使用“制作新的积木”按钮,“新建积木”的方法

  2. 学习了如何把具有一定功能的一段代码抽取出来,形成一个独立函数的思维过程,这是本课的重点和难点,也是今后很大一部分课程的核心内容;

  3. 学习了如何使用代码对新建的积木进行定义的方法;

  4. 学习了如何使用“自己定义的积木”(简称“自定义积木”)的方法

您必须 登录 才能发表评论!