题解 | 坐标移动

坐标移动

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



  • 本题是将“字符串指令”转化为“实际指令”的问题
  • 先按照分隔符“;”将单个指令分开
  • 再将非常明显的“不合法指令”去除——指令长度和指令首字母
  • 按照合法指令的规范转化步数为实际数字
  • 最后不需要在意顺序,因为最终坐标的位置与指令顺序无关
全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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