苹果SwiftPlaygrounds编程:一堂惊喜的数学(英语)课程

发表时间: 2019-04-16 08:08

前言:

在英语的教学过程中。我发现只有把英语当做一个工具,才能让孩子们真正学好英语,并且掌握它。

背景介绍:

swiftplaygrounds是苹果公司推出的专门锻炼逻辑思维的编程启蒙游戏,通过游戏通关的方式让孩子掌握swift编程的基本知识。它与scratch猫抓编程, 或者是国内的编程猫等其他编程启蒙最大的不同之处在于,去除了浮夸酷炫的游戏效果,在类似于迷宫的立体实际环境中锻炼实际解决问题的能力。每个编程知识都会设定难度逐增的关卡。在层层递进的关卡中,循序渐进的学习相关编程知识。而且越到后面,每一关都会有好几种解决问题的方法,需要综合灵活运用前面所学的编程知识。

最后,经过不断的浴血通关战斗,学习者的逻辑思维会有一个质的提升,特别是对逻辑运算符的应用会相当的娴熟,这为以后正式学习swift语言或者其他编程语言打下坚实的基础。

今天我们讲下如何用数学知识来解决看似很难的编程关卡--随机宝石遍布各处。

宝石随机出现在各处,每次的数量都不一样

首先,我让学生们自己观察下这一关的特点,然后让他们说出观察到的情况。(几分钟后)

学生A说:这一关好诡异,每运行一次,宝石所在的位置都不同,而且每次宝石出现的数量都不一样。

学生B说: 怎样控制两个不同颜色的传送门,该用什么变量控制呢?

老师说:大家观察得都很仔细,问得也很好,我们知道单单用收集宝石到的数量无法控制传送门的状态(开或者关),那么 我们是否应该增加一个变量来控制传送门,并且在收集指定宝石后就让小怪物停止走动。

过了10分钟同学们还是一筹莫展,个个眉头紧锁。

我就给了点提示,“大家试试用转身的次数做为变量试试。”

又过了10分钟,A同学已经做出来了,他很兴奋,赶紧拉我进去看他写的程序代码,“老师老师,我做出来了!”

我看了下他的代码,稍显冗长但是整体做得还不错,我就让他把代码优化下,原本他的代码如下:

If turnAround==1||turnAround==3||turnAround==5 {

pinkPortal.isActive=false

bulePortal.isActive=false

}

If turnAround==2||turnAround==4||turnAround==6 {

pinkPortal.isActive=true

bulePortal.isActive=false

}

因为这两种情况是相对立的,所以我建议他用if--else语句。

代码优化如下:

If turnAround==1||turnAround==3||turnAround==5 {

pinkPortal.isActive=false

bulePortal.isActive=false

}else {

pinkPortal.isActive=true

bulePortal.isActive=false

}

然后我问他,在这一关中最多出现8颗宝石,我们现在的方法只适用于最多收集8颗宝石,如果宝石数量是100颗,我们该怎么办?

同学们又陷入的沉思中,过了一会儿,学生B说:“我发现转身的次数是有规律分布的,1,3,5 和数字2,4,6, 分别是基数和偶数。那该如何用代码表达这种情形呢?”

我看时间已经成熟,就和学生讲;“B同学分析得很好,1,3,5是基数,2,4,6是偶数。我们可以用数学余数的知识把这个具体的解决方案宽泛化。

我们知道1,3,5被2除的话,余数是1,用编程的语言可以这样写turnAround%2!=0(即余数不等于0),而2,4,6被2除的话,余数是0;所以当余数不等于0的时候让所有的传送门都关闭,否则就让它们开着。

具体代码如下:

If turnAround%2!=0 {

pinkPortal.isActive=false

bulePortal.isActive=false

}else {

pinkPortal.isActive=true

bulePortal.isActive=false

}

然后我和学生说,大家看这个方法适用性更广,代码反而更简洁了。同学们纷纷点头赞同。

学生C说;“老师,是否还有别的办法呢?”

我说;“当然还有更好的办法,但是大家先用步数做变量把这个关卡再通关下。”

底下的学生既哀嚎又兴奋的做了起来,看着他们那么投入,我感觉特好。

这堂课让他们明白:

1.只要对解决问题有帮助的因素都可以设定为变量。

2.用数学知识可以高效的解决编程的问题。

3.认识解决方案的局限性及如何把这个方案适用性更广

完整解决方案如下--仅供参考