Python如何按方向序列对坐标依次执行加减偏移运算
坐标移动计算实现方案
原代码存在的语法错误
你写的初始代码有3处语法问题,先修正:
- 列表内元素分隔必须用逗号,你写的
[1:0]、[0:-1]、[-1:0]用了冒号,这是列表切片的语法,不是定义列表元素 - 字典的键值对之间必须用逗号分隔,你在
'S':[0,-1]后面写了英文句号,会直接报语法错误 - 偏移字典不需要额外套
dict(),直接写大括号定义就是字典类型
实现逻辑说明
整个计算流程非常清晰:
- 初始化当前坐标为起始值
- 按顺序遍历方向序列里的每一个方向
- 从方向偏移映射表里取出当前方向对应的x轴偏移、y轴偏移
- 把偏移量分别加到当前坐标的x、y值上
- 打印本次移动后的最新坐标
- 所有方向遍历完成后,当前存储的坐标就是终点坐标
完整可运行代码
# 定义起始坐标 current_pos = [3, 12] # 定义方向对应偏移量:key是方向,value是[x偏移, y偏移] direction_offset = { 'N': [0, 1], 'E': [1, 0], 'S': [0, -1], 'W': [-1, 0] } # 定义方向序列 directions = ('S', 'S', 'W', 'S', 'S', 'S', 'E', 'E', 'E') print(f"初始坐标:{current_pos}") for d in directions: # 取出当前方向的偏移 dx, dy = direction_offset[d] # 更新坐标 current_pos[0] += dx current_pos[1] += dy # 打印移动后坐标 print(f"沿方向{d}移动后坐标:{current_pos}") print(f"最终终点坐标:{current_pos}")
运行结果参考
运行上面的代码会按顺序输出每一步的坐标:
初始坐标:[3, 12] 沿方向S移动后坐标:[3, 11] 沿方向S移动后坐标:[3, 10] 沿方向W移动后坐标:[2, 10] 沿方向S移动后坐标:[2, 9] 沿方向S移动后坐标:[2, 8] 沿方向S移动后坐标:[2, 7] 沿方向E移动后坐标:[3, 7] 沿方向E移动后坐标:[4, 7] 沿方向E移动后坐标:[5, 7] 最终终点坐标:[5, 7]
三种常用序列类型区分
你之前混淆的列表、元组、字典适用场景可以简单记:
- 列表(
[]定义):存储需要修改的序列数据,比如这里会不断更新的坐标值就适合用列表 - 元组(
()定义):存储不需要修改的固定序列数据,比如这里固定不变的方向序列就可以用元组 - 字典(
{}定义,存储键值对):适合做映射关系,比如这里方向到偏移量的对应关系,用字典查询效率最高
内容的提问来源于stack exchange,提问作者robbo500
相关产品推荐
相关产品推荐

