move() turn_left() move() put_beeper()
上述代码会依次执行每一行:Karel先向前移动,然后左转,再向前移动,最后放置一个beeper。
for 变量 in 可迭代对象: # 循环体 要重复执行的语句
示例:
# Karel向前移动5步 for i in range(5): move()
上述代码会让Karel向前移动5步。每次循环,Karel执行一次移动操作。
区别: for 循环适合已知次数或遍历对象,while 循环适合次数不确定、依赖条件的重复。
for i in range(3):
# 外层循环,控制行
for j in range(4):
# 内层循环,控制列
print(i, j)
上述代码会输出所有行列组合(共3×4=12次),即遍历一个3行4列的表格。
while 条件:
# 循环体
要重复执行的语句
示例:
while front_is_clear():
move()
上述代码会让Karel一直向前移动,直到遇到墙为止。只要前方畅通,就会继续移动。
区别: for 循环适合已知次数的重复,while 循环适合次数不确定、依赖条件的重复。
前置条件示例:使用while循环让Karel移动到墙边
# 前置条件:每次循环前检查前方是否畅通 while front_is_clear(): move()
在这个例子中,每次循环开始前都会检查前方是否畅通,只有前方没有墙时才会执行移动操作。
后置条件示例:使用while循环让Karel移动到墙边
# 后置条件:确保每次循环后Karel都移动到新位置 while front_is_clear(): move()
在这个例子中,每次循环后Karel都会移动到新位置,确保下次循环时检查的是新的位置前方是否畅通,避免无限循环。
循环状态一致性:确保循环前后状态匹配
# 前置条件:Karel在起点,面向东 while front_is_clear(): move() # 后置条件:Karel移动到新位置,仍面向东(与前置条件一致)
这个循环确保Karel在每次循环后都保持相同的方向,使得循环条件在下次检查时仍然有效。
# 例:让Karel向前移动5步
for i in range(1,5):
move()
# 实际只移动了4步,漏掉了第5步
避免方法:明确循环的起止条件,理解 range 的左闭右开特性,必要时多画图或举例验证。在Karel编程中,要特别注意移动步数的计算。
if 条件1:
# 条件1为真时执行
elif 条件2:
# 条件2为真时执行
else :
# 以上条件都不满足时执行
示例:
if beepers_present():
pick_beeper()
move()
else:
turn_left()
move()
上述代码会根据当前位置是否有beeper来执行不同的操作:如果有beeper就收集并移动,如果没有beeper就左转后移动,实现了分支选择。
match 变量:
case 值1:
# 变量等于值1时执行
case 值2:
# 变量等于值2时执行
case _:
# 其他情况
示例:
# 根据Karel的朝向执行不同动作
direction = "north"
match direction:
case "north":
move()
case "south":
turn_left()
turn_left()
move()
case "east":
turn_left()
move()
case _:
put_beeper()
上述代码会根据Karel的朝向执行不同的移动动作,实现了多分支选择。