|
本帖最后由 mengying 于 2009-11-11 22:07 编辑
上课准备提纲
| 志愿者信息
| 备课人
| mengying
| Email/MSN
| mengying(at)ygclub(dot)org
| 所属课程组
| 计算机
| 课程信息
| 课程名称
| 计算机-机器人
| 上课日期
| 2009.11.14
| 上课时长
| 50分钟
| 授课对象
| 平西王府弘立小学
| 学生信息
| 10人,4~5年级学生,上次新来一个初一的不知道这周是否继续。
| 是否已了解上次课的授课情况(Y / N)Y
| 本次课的教案是重复使用已有教案吗(Y / N)Y
| 授课目标
| 1,
熟悉学过的命令: move(), turn_left(), turn_off()
2. 继续学习和熟悉逻辑思维与代码语言的转换
3. 继续学习 def name(): 命令
4. 学习新命令 repeat(name, times)
5. 如果时间允许还可以稍微带入判断语句 front_is_clear(), left_is_clear(), right_is_clear()
| 授课内容
| 1, 小结前几次课的内容
2, 学习 def name():
3, 学习 repeat(name, times)
4. 做简单的跨栏程序(高度和间隔相等的栏)
| 授课提纲
| 1. 小结顺时针正方形的程序(因为上节课有50%左右的学生没有完成爬楼梯),以此引入上节课学习的新命令def。(10~15”讲解+练习)
1.1 def的讲解。def定义的新方法的调用对大部分学生来说是难以理解的,上节课看到的情况不是很好,除了巫高攀,没有人正确做出来,包括一直表现也不错的王林志。所以我想有必要再解释一下。(1~2”)
1.2 学生完成def的小练习:定义一个前进两步的方法和一个向右转的方法,然后调用这两个方法让机器人先前进两步然后右转。(3~5”)
- def turn_right(): //def youzhuan(): (根据学生的情况也可以使用拼音)
- turn_left()
- turn_left()
- turn_left()
- def move2():
- move()
- move()
- move2()
- turn_right()
- turn_off()
复制代码
1.3 def 最直接的好处:把经常用到的同类命令集定义成一个新的方法,可以简化代码。以顺时针正方形程序为例,找到其中的规律—有其中一大段都是每2个move()接下来是3个turn_left(),所以我们可以通过定义一个前进两步的方法和一个向右转的方法来简化代码。学生使用def完成顺时针正方形程序(要求定义前进两步和向右转两个方法)。(5~8”)
- // Rectangle
- def turn_right():
- turn_left()
- turn_left()
- turn_left()
- def move2():
- move()
- move()
- turn_left()
- move2()
- turn_right()
- move2()
- turn_right()
- move2()
- turn_right()
- move2()
- turn_off()
复制代码
1.4 简单讲解程序。(2”)
2. 通过改画更大的正方形来引入repeat概念。(35“)
2.1 以上我们使用def大大简化了顺时针画2x2正方形的程序,那么如果要顺时针画一个9x9的正方形应该怎样对以上程序进行修改呢?(请学生口头回答)定义一个前进9步的方法。然后我们可以发现这个前进9步的方法也很麻烦,一共需要9个完全相同的语句。我们有一个新的方法来简化这种重复的语句 – repeat(method_name,times)。 那么前进9步的方法可以直接简化为:(10~15“)
- def move9():
- repeat(move,9)
复制代码
同理,之前的前进2步的方法简化为:
- def move2():
- repeat(move,2)
复制代码
右转可以简化为:
- def turn_right():
- repeat(turn_left,3)
复制代码
这时候再看我们的顺时针画正方形的程序有什么发现?我只需要改变自定义的前进方法中的数字,就可以画出相应大小的正方形,不需要改动其他语句。
2.2 学生使用repeat 和 def 写跨栏程序(地图文件hurdles1.wld)。(15“)
-
- //hurdles
- def turn_right():
- repeat(turn_left,3)
- def hurdle():
- move()
- turn_left()
- move()
- turn_right()
- move()
- turn_right()
- move()
- turn_left()
- repeat(hurdle,4)
- move()
- pick_beeper()
- turn_off()
复制代码
(在学生自己写程序时自己定义的方法名字不作要求,跨栏方法当中的具体的语句不作要求—这只关系到他的程序的简化程度,重点放在方法的定义和对自定义方法的调用,以及抽象的能力训练上。)
2.3 简单讲解程序,你写的程序也是这么简单吗?(3”)
3. 课后的思考:分别打开hurdles3.wld和hurdles4.wld,执行一下上面的跨栏程序有怎样的状况发生?小机器人撞墙了。为什么会撞墙?因为栏间距和栏高不一样。有没有什么办法能够只用一个程序把这些摆放位置不一样的栏都顺利地跨过去呢?如果机器人自己能够思考,能够知道它的前方是否有墙/栏就好了,然后我们告诉它如果前面有墙/栏就左转,这样它就撞不到墙了……由此引入if, front_is_clear() 语句,同理还有left_is_clear(),right_is_clear()。想一想,应该怎样使用这些句子使机器人有思考的能力?下课。(5”)
- …
- if front_is_clear():
- move()
- …
复制代码
| 教学环境、材料需求
| 计算机、RUR-PLE
| 助教需求
| 3名以上助教,同时希望助教最好再事先把程序自己跑一跑。
|
|
|
|
|
|
|
|
|
|
|
|