畫斜線
畫線條是我們格子模組裡的習題之一, 屬於中間難度, 當他們熟悉了格子模組的一些指令以後, 我們請他們觀察這個圖形, 把他畫出來。
孩子首先觀察到中間三條紅線上格子的座標裡, 列和行的關係有三種規律, 第一條是 i, 3-i; 第二條是 i, 6-i; 第三條是 9-i, i+3; 就這麼用三個迴圈畫出這三條斜線, 加上最左上和最右下那一格來把答案畫出來
import grid = "grid"
def draw():
for i from 0 to 6:
for j from 0 to 6:
grid.setBg(i, j, "yellow")
grid.setBg(0, 0, "red")
for i from 0 to 3:
grid.setBg(i, 3-i, "red")
for i from 0 to 6 :
grid.setBg(i, 6-i, "red")
for i from 3 to 6:
grid.setBg(9-i, i+3, "red")
果然畫出正確答案, 孩子能這樣想出來已經很不錯了! 但是我請他再檢視一次座標上的數字, 玩一玩加減乘除。他想了很久才發現, 斜線上紅色格子座標裡, 列和行的和是有規律的, 於是重寫出下面的程式。雖然看比原來的程式還長一點, 但規律更明顯, 更漂亮了, 他覺得很滿意!
import grid = "grid"
def draw():
for i from 0 to 6:
for j from 0 to 6:
grid.setBg(i, j, "yellow")
if i+j==0:
grid.setBg(i, j, "red")
if i+j==3:
grid.setBg(i, j, "red")
if i+j==6:
grid.setBg(i, j, "red")
if i+j==9:
grid.setBg(i, j, "red")
if i+j==12:
grid.setBg(i, j, "red")
不過這樣還不夠, 我請他再觀察這些座標和, 程式還可以更簡潔。, 這次他很快就找到了, 他五個畫斜線的迴圈裡, 座標和分別是0,3,6,9,12, 全都是 3 的倍數。 找到這個共同的規律再改寫後, 寫出來的程式大幅縮短一半, 而且適用在不同大小面積的格子畫斜線, 比原來的程式更強大。這就是一個好程式該具備的條件, 簡單, 規律, 好用。
import grid = "grid"
def draw():
for i from 0 to 6:
for j from 0 to 6:
grid.setBg(i, j, "yellow")
if (i + j)%3 == 0:
grid.setBg(i, j, "red")
給作業時, 我們會讓孩子先用自己的直覺和方法試試看, 然後在檢討作業時, 討論不同的想法和寫法, 互相觀摩。"不要怕寫錯,” 我們鼓勵孩子從自己的想法出發, 然後測試, 修改, 觀察, 提出疑問, 修改, 測試, 思考, 再修改。 這樣走來好像比較迂迴, 但比較實在。
我問他, 這樣多次改寫的感覺如何? 他微笑地說很棒! 頗有突破窒礙, 通體舒暢的感覺, 嘿嘿, 至少我是這麼覺得的, 因為不能直接說出我看到的規律而要讓他自己發現說出來, 著實得憋著, 但為了能夠第一手分享他們 "啊! 我想到了" 的那種喜悅, 也就都值得了。