畫斜線

畫線條是我們格子模組裡的習題之一, 屬於中間難度, 當他們熟悉了格子模組的一些指令以後, 我們請他們觀察這個圖形, 把他畫出來。

孩子首先觀察到中間三條紅線上格子的座標裡, 列和行的關係有三種規律, 第一條是 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")

 

給作業時, 我們會讓孩子先用自己的直覺和方法試試看, 然後在檢討作業時, 討論不同的想法和寫法, 互相觀摩。"不要怕寫錯,” 我們鼓勵孩子從自己的想法出發, 然後測試, 修改, 觀察, 提出疑問, 修改, 測試, 思考, 再修改。 這樣走來好像比較迂迴, 但比較實在。

 

我問他, 這樣多次改寫的感覺如何? 他微笑地說很棒! 頗有突破窒礙, 通體舒暢的感覺, 嘿嘿, 至少我是這麼覺得的, 因為不能直接說出我看到的規律而要讓他自己發現說出來, 著實得憋著, 但為了能夠第一手分享他們 "啊! 我想到了" 的那種喜悅, 也就都值得了。

 

畫線條