利用循环变量 i 的表达式把 i 的值映射到另一个值域常常难住初次面对这类挑战的孩子。
所以我需要经常跟家长朋友们解释,小孩子学编程,不是学编程,是学数学,学逻辑推理,练习抽象思维,培养解决问题的能力,提升信心。
小E在仿真器屏幕上把象棋的32颗棋子画出来了。很漂亮,是一颗一颗画的。
我说能不能用一个for循环把那两颗红士画出来。原来的程序差不多长这样:
小E以前做过类似的for循环,所以写出for循环框架没问题。而且还熟练地拷贝了一行代码放进循环体中。
他也知道焦点在那个“5”,可是就想不出一个合适的含 i 的表达式能构造出 3 和 5 。我在注释中写了这个:
让他把问号的地方换成一个“有 i 的有加减乘除什么的的一个式子”。
没反应。
我说:“来个容易点的。哦,这两个都很容易。上面两个。”又提供了两个简单的mapping。
还没反应。
我说:“我这么写你就肯定行了。”给上面两个映射各加了一行。
不出所料,小E立马写出了两个简单函数 i * 5 和 i + 3。
还在思考关键的第三个。
我说:“第三个你自己加一行呗。”小E自言自语:“加一行应该是 7 吧?”
水到渠成。
随后自然是一马平川。双士所需的映射函数搞明白了,双象的映射,双马的映射,统统拿下。对于双车的映射,小E表示:“这个我还能更简单些,因为加上零等于不加”。
遇到双炮时,自己还咕噜了一句:“炮我觉得用马的就可以了”。
从他的口气中我听到了信心满满。
补充:几分钟前,小E发来了惊艳的国际象棋棋盘。
帅呆了!
胃口好就再喂点食:“再给一个难题思考思考:如果我知道手指头触到屏幕上的位置是(123,234),怎么计算手指头落在国际象棋的哪个格子中呢?”