Python通过列表索引实现track_robot机器人坐标计算的X轴处理问题
机器人坐标追踪实现方案
原代码存在的问题
- 用
steps.index(coord)获取索引逻辑错误:如果入参中存在重复的坐标值,index()方法只会返回第一个匹配值的索引,会导致后续所有同值坐标的方向判断完全错乱,应该用enumerate遍历同时获取真实索引和对应坐标值。 - 维护4个方向变量的逻辑冗余,仅需要两个轴变量即可完成计算,天然支持负坐标输入,不需要额外做正负判断处理。
最终实现代码
# 给机器人传入任意数量坐标,返回其最终位置 [x轴(东正西负), y轴(北正南负)] # 入参顺序:北、东、南、西循环排列 def track_robot(*steps): x = 0 # 东西轴:东为正,西为负 y = 0 # 南北轴:北为正,南为负 for idx, coord in enumerate(steps): direction = idx % 4 if direction == 0: # 北向,y轴加对应坐标 y += coord elif direction == 1: # 东向,x轴加对应坐标 x += coord elif direction == 2: # 南向,y轴减对应坐标 y -= coord elif direction == 3: # 西向,x轴减对应坐标 x -= coord return [x, y]
逻辑说明
- 约定南北向为Y轴,北向为正方向;东西向为X轴,东向为正方向,负坐标会自动处理反向移动的逻辑,不需要额外判断正负。
- 每次用当前参数索引对4取模,即可得到对应的方向:0对应北、1对应东、2对应南、3对应西,完美匹配入参的循环排列规则。
- 最终返回的结果可根据需要调整顺序,如果要返回
[南北坐标, 东西坐标],把return语句改成return [y, x]即可。
示例运行验证
track_robot(20, 30, 10, 40)→ 返回[-10, 10](西10,北10)track_robot(10, -10, -10, 10)→ 返回[-20, 20](西20,北20)track_robot(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)→ 返回[-4, -4](西4,南4)
内容的提问来源于stack exchange,提问作者Abdullah Bera Koksal
相关产品推荐
相关产品推荐

