题解 | 坐标移动
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
import sys
input = sys.stdin.readline
def main():
# 小人的初试位置
begin = [0,0]
direction = {'A':[-1,0],'D':[1,0],'W':[0,1],'S':[0,-1]}
# 将字符串的每一个操作划分成单位放入列表operate中,并去掉';'
operate = list(input().split(';'))
operation = []
# 遍历operate中的操作,将合法的操作留下,不合法的去掉
for st in operate:
# 长度不符,直接去除
if len(st) < 2 or len(st) > 3:
continue
# 操作符号不符,直接去除
if st[0] != 'A' and st[0] != 'D' and st[0] != 'W' and st[0] != 'S':
continue
# 尝试将其后的字符转为数字
try:
# 移动距离设置为lx
lx = int(st[1:])
except ValueError:
continue
operation.append((st[0],lx))
# 合法操作对坐标进行改变
for opkey,opvalue in operation:
dx, dy = direction[opkey]
begin[0] += dx * opvalue
begin[1] += dy * opvalue
# 打印最终坐标
print(f'{begin[0]},{begin[1]}')
if __name__ == '__main__':
main()
- 本题是将“字符串指令”转化为“实际指令”的问题
- 先按照分隔符“;”将单个指令分开
- 再将非常明显的“不合法指令”去除——指令长度和指令首字母
- 按照合法指令的规范转化步数为实际数字
- 最后不需要在意顺序,因为最终坐标的位置与指令顺序无关


