任务目标:让Karel把房间里的所有beeper清理干净。
Karel清理房间的不同抽象层次
# 最高抽象层次:目标描述 清理房间中的所有beeper # 中等抽象层次:主要步骤 def main(): 清理当前行 while 还有更多行: 移动到下一行 清理当前行 # 较低抽象层次:具体函数 def clean_current_row(): while front_is_clear(): if beepers_present(): pick_beeper() move() # 最低抽象层次:基本指令 move() turn_left() pick_beeper()
逐步求精分解思路:
1.清理当前行
2.移动到下一行
3.清理当前行
4.重复
# 高层次伪代码 def main(): 清理当前行 while 左侧有路: 移动到下一行 清理当前行 # 细化每一步 def main(): 清理当前行 while 左侧有路: 移动到下一行并向西 清理当前行 if 右侧有路: 移动到下一行并向东 清理当前行 else: 转身 # 进一步细化为具体函数 def main(): clean_current_row() # 防止栅栏柱错误 while left_is_clear(): reposition_for_row_to_west() clean_current_row() if right_is_clear(): reposition_for_row_to_east() clean_current_row() else: turn_around() # 细化子任务:清理当前行 def clean_current_row(): while front_is_clear(): if beepers_present(): pick_beeper() else: move() # 防止栅栏柱错误:确保清理完当前行后,Karel在最后一个角落收集beeper if beepers_present(): pick_beeper() # 细化子任务:移动到下一行并向西 def reposition_for_row_to_west(): turn_left() move() turn_left() # 细化子任务:移动到下一行并向东 def reposition_for_row_to_east(): turn_right() move() turn_right() # 细化子任务:向右转 def turn_right(): for i in range(3): turn_left() # 细化子任务:向后转 def turn_around(): turn_left() turn_left()