
代码逐行解析
这段代码实现了一个简单的「指令驱动移动」程序:根据用户输入的指令串(只含 F/B/L/R),让一个点从原点 (0, 0) 出发逐步移动,并打印出完整路线、最终坐标和总步数。
1. compute_route(commands) —— 核心移动逻辑
def compute_route(commands):
"""按指令串逐步移动,返回记录每一步位置的列表。"""
x, y = 0, 0
route = [(x, y)]
for ch in commands:
if ch == 'F':
y += 1
elif ch == 'B':
y -= 1
elif ch == 'L':
x -= 1
elif ch == 'R':
x += 1
else:
continue
route.append((x, y))
return route
- x, y = 0, 0:初始化坐标,从原点出发。
- route = [(x, y)]:用列表记录路线,先把起点放进去。
- for ch in commands:逐个字符遍历指令串。
- 四个方向分支:
- F(Forward)→ y += 1,向上走一步;
- B(Backward)→ y -= 1,向下走一步;
- L(Left)→ x -= 1,向左走一步;
- R(Right)→ x += 1,向右走一步;
- else: continue:遇到其他字符直接跳过,不产生移动。
- 每执行一条有效指令,就把新坐标 (x, y) 追加进 route。
- 最终返回 route,即每一步的位置列表。
2. show_result(commands) —— 打印完整结果
def show_result(commands):
"""计算并打印一条指令串的完整路线与结果。"""
route = compute_route(commands)
final_x, final_y = route[–1]
steps = len(route) – 1
route_text = " → ".join("({}, {})".format(px, py) for px, py in route)
print("输入指令:{}".format(commands))
print("路线:{}".format(route_text))
print("最终坐标:({}, {})".format(final_x, final_y))
print("总步数:{}".format(steps))
if final_x == 0 and final_y == 0:
print("已回到起点")
else:
print("未回到起点")
print("-" * 40)
- route = compute_route(commands):调用上面的函数拿到完整路线。
- final_x, final_y = route[-1]:取列表最后一个元素,即最终坐标。
- steps = len(route) – 1:总步数 = 路线点数 – 1(去掉起点本身)。
- route_text:用 " → " 把每个坐标点拼接成可读的路线字符串。
- 依次打印:输入指令、路线、最终坐标、总步数。
- 判断是否回到原点 (0, 0),并输出对应提示。
- print("-" * 40):打印分隔线,便于多条指令结果之间区分。
3. main() 与程序入口
def main():
commands = input("请输入指令串(只含 F/B/L/R):").strip().upper()
show_result(commands)
if __name__ == "__main__":
main()
- input(…):提示用户输入指令串。
- .strip():去掉首尾空白字符。
- .upper():统一转成大写,避免用户输入小写 f/b/l/r 时匹配不上。
- show_result(commands):调用打印函数输出结果。
- if __name__ == "__main__"::保证只有直接运行本文件时才执行 main(),被其他模块导入时不会自动运行。
运行示例
输入 FFLBR,输出如下:

输入FLBR,输出如下:

避障决策程序解析
这段代码实现了一个「避障决策」程序:根据每组传感器测得的距离和当前电量,自动判断小车应该执行哪种动作,并统计各类动作的执行次数。
1. 数据准备
distances = [80, 35, 10, 80, 20, 50]
batteries = [60, 60, 60, 15, 20, 20]
ACTIONS = ["正常前进", "减速前进", "停止避障", "停止并充电"]
- distances:列表,存放 6 组障碍物距离(单位 cm)。
- batteries:列表,存放对应的 6 组电量(单位 %)。
- ACTIONS:列表,定义四种可能的动作名称,供后续统计使用。
2. decide_action(distance, battery) —— 决策核心
def decide_action(distance, battery):
"""根据一组(距离, 电量)返回应执行的动作文字。"""
if battery < 20:
return "停止并充电"
if distance < 20:
return "停止避障"
if distance < 50:
return "减速前进"
return "正常前进"
- 函数接收两个参数:distance(距离)和 battery(电量)。
- 判断顺序从上到下,先满足哪个条件就返回哪个动作:
- 电量低于 20% → 无论距离多远,都返回「停止并充电」(电量优先);
- 距离小于 20cm → 障碍物太近,返回「停止避障」;
- 距离小于 50cm → 距离较近,返回「减速前进」;
- 其余情况 → 距离充足,返回「正常前进」。
3. main() —— 主流程
def main():
stats = {name: 0 for name in ACTIONS}
for index in range(len(distances)):
distance = distances[index]
battery = batteries[index]
action = decide_action(distance, battery)
stats[action] += 1
print("第{}组:距离 {}cm,电量 {}%,动作:{}".format(
index + 1, distance, battery, action))
print("-" * 40)
summary = ",".join("{} {}次".format(name, stats[name]) for name in ACTIONS)
print("统计结果:{},四项合计{}次。".format(summary, len(distances)))
- stats = {name: 0 for name in ACTIONS}:用字典推导式创建统计表,把四种动作的计数都初始化为 0。
- for index in range(len(distances)):按索引遍历 6 组数据。
- distance = distances[index]、battery = batteries[index]:按相同索引取出对应的距离和电量。
- action = decide_action(distance, battery):调用决策函数得到该组应执行的动作。
- stats[action] += 1:把对应动作的计数加 1。
- print(…):打印当前组的编号、距离、电量和决策结果。
- print("-" * 40):打印分隔线。
- summary:用 ",".join(…) 把四种动作的统计结果拼接成字符串。
- 最后打印统计结果,并用 len(distances) 验证四项合计次数等于数据组数。
4. 程序入口
if __name__ == "__main__":
main()
- 保证只有直接运行本文件时才执行 main(),被其他模块导入时不会自动运行。
运行结果推演
逐组分析:
| 1 | 80 | 60 | 正常前进 |
| 2 | 35 | 60 | 减速前进 |
| 3 | 10 | 60 | 停止避障 |
| 4 | 80 | 15 | 停止并充电 |
| 5 | 20 | 20 | 减速前进 |
| 6 | 50 | 20 | 正常前进 |
统计结果:正常前进 2 次,减速前进 2 次,停止避障 1 次,停止并充电 1 次,四项合计 6 次。


网硕互联帮助中心




评论前必须登录!
注册