题解 | #坐标移动#

坐标移动

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())

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务