题解 | 坐标移动
坐标移动
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()
- 本题是将“字符串指令”转化为“实际指令”的问题
- 先按照分隔符“;”将单个指令分开
- 再将非常明显的“不合法指令”去除——指令长度和指令首字母
- 按照合法指令的规范转化步数为实际数字
- 最后不需要在意顺序,因为最终坐标的位置与指令顺序无关