前言:
在英语的教学过程中。我发现只有把英语当做一个工具,才能让孩子们真正学好英语,并且掌握它。
背景介绍:
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.认识解决方案的局限性及如何把这个方案适用性更广
完整解决方案如下--仅供参考