题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
def solution(cor):
std = ["A", "D", "S", "W"] # 用来判断方向输入是否合法
dic = {"A":0, "D":0, "S":0, "W":0} # 建立字典存储每个方向移动距离
li = cor.split(";") # 分割输入
num = "" # 临时记录移动距离
for i in li: # 因为有效输入要么为字母+1位数字,要么为字母+2位数字,所以长度只有2和3两种情况,长度小于2和大于3的输入均非法
if len(i) == 3:
if (i[0] in std ) and (ord(i[1]) in range(48, 58)) and (ord(i[2]) in range(48, 58)): # 如果输入长度为3,表示输入应该为字母+2位数字,所以在这里判断第一位字母是否为A,D,S,W其中之一,同时后面的两位是否都是0-9的数字(因为后两位可能是任意一个字符,所以直接将字符全部转ASCII,数字0-9的ASCII是48-57,因此可以进行判断)。
num = i[1] # 坐标移动的两位数的第一位数字
num = num + i[2] # 坐标移动的两位数的第一位数字+第二位数字,组成一个两位数
dic[i[0]] += int(num) # 将坐标移动数字累加进字典
elif len(i) == 2: # 如果输入长度为2,表示输入应该为字母+1位数字,所以在这里判断第一位字母是否为A,D,S,W其中之一,同时第二位是否为0-9的数字。
if i[0] in std and ord(i[1]) in range(48, 58):
num = i[1] # 坐标移动的一位数字(因为前面已经判断了输入为字母+1位数字)
dic[i[0]] += int(num)
X = str(dic["D"] - dic["A"]) # 在x坐标轴上,用正方向总移动数减去负方向总移动数,就是x最后的坐标(由题目和给的例子可知,D为x轴正方向,A为x轴负方向,W为y轴正方向,S为y轴负方向)。
Y = str(dic["W"] - dic["S"]) # 在y坐标轴上,用正方向总移动数减去负方向总移动数,就是y最后的坐标。
print(X+","+Y)
solution(input())
