作业2:Karel修复拱门
你的任务是让Karel修复地震中受损的拱门石柱。
世界说明如下:
1.拱门的石柱位置分别在:第一列、第五列、第九列、第十三列(横行竖列);
2.蜂鸣器列的顶部将始终由一堵墙标记;
3.在初始世界中,一些列可能已经包含表示仍在原位的石头的蜂鸣器;
4.Karel初始状态:第一行与第一列的角落,面向东方;背包里有100个蜂鸣器。
你需要解决的问题是让Karel修复拱门,其中支撑拱门的石柱上缺少一些石块(当然由蜂鸣器表示);
Karel需要在一系列特定位置的石柱上补充缺失的石块,同时保留已有的石块。你需要完成的任务是编写指令序列,让 Karel 能够:
步骤1.修复当前石柱;
步骤2.移到下一个石柱;
步骤3.循环直到所有石柱都修复完成;
当Karel完成后,石柱缺失的石块应该用蜂鸣器替换,这样上面显示的初始世界产生的最终图片就会如下图所示:
通用性考虑:
1.不设定石柱的固定高度,通过内置函数的条件判断石柱的高度;
2.不应在已经有蜂鸣器的角落放置第二个蜂鸣器;
3.不设定石柱的固定数量,通过内置函数的条件判断最后一个石柱;
4.符合所有给定的世界条件和起始状态
继续练习分解思维。在你的解决方案中,至少编写两个辅助函数:
1.用于实现步骤1的函数
2.用于实现步骤2的函数
🚀注意:函数名要见名知意;单词(当然也可以用拼音)之间用下划线连接;函数名要短。🕊
🚀注意:Fencepost Bug(栅栏柱错误)
⏳开始你的编程之旅吧!
🔥逐步求精法🔥
🔥边开发边迭代测试🔥
函数 |
描述 |
函数 |
描述 |
move() |
向前移动一步 |
turn_left() |
向左转90度 |
pick_beeper() |
拾取当前位置的蜂鸣器 |
put_beeper() |
在当前位置放置蜂鸣器 |
front_is_clear() |
检查前方是否有墙 |
front_is_blocked() |
检查前方是否被墙挡住 |
left_is_clear() |
检查左侧是否有墙 |
left_is_blocked() |
检查左侧是否被墙挡住 |
right_is_clear() |
检查右侧是否有墙 |
right_is_blocked() |
检查右侧是否被墙挡住 |
beepers_present() |
检查当前位置是否有蜂鸣器 |
no_beepers_present() |
检查当前位置是否没有蜂鸣器 |
beepers_in_bag() |
检查背包中是否有蜂鸣器 |
no_beepers_in_bag() |
检查背包中是否没有蜂鸣器 |
facing_north() |
检查是否面向北方 |
not_facing_north() |
检查是否没有面向北方 |
facing_south() |
检查是否面向南方 |
not_facing_south() |
检查是否没有面向南方 |
facing_east() |
检查是否面向东方 |
not_facing_east() |
检查是否没有面向东方 |
facing_west() |
检查是否面向西方 |
not_facing_west() |
检查是否没有面向西方 |