题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
###思路大体上是操作二维向量的方式,如果用R可能更方便。
import sys
st = input().split(";") #获取并拆分数据
st_use1 = [x for x in st if len(x)==3] ##把三位的字符串取出来
st_use2 = [str(x[0]+"0"+str(x[1])) for x in st if len(x)==2] ##把两位的字符串取出并在中间出插入'0'
st_use = st_use1 + st_use2 #把刚才两个字符串合并,保证字符串集合都是3位。
direction = {"A":[-1,0],"S":[0,-1],"W":[0,1],"D":[1,0]} #定义字典,表示运动方向。
def listadd(l1,l2): ##定义一个列表逐个元素的加法,即R的向量加法
res = [l1[0]+l2[0],l1[1]+l2[1]]
return res
def listmul(list,num): ##定义一个列表逐个元素的乘法,即R的向量乘法
res = [x*num for x in list ]
return res
position = [0,0] ##定义位置变量并初始化
for x in st_use:
if (x[0] in ['A','S','D','W']) and (0 <= int(x[1],36) <= 9) and (0 <= int(x[2],36) <= 9):
#由于移动命令都已经被处理成3位字符串,所以挨个位置判断即可。
#0位置筛选字典编码,1,2位置判断是否为纯数字,此处的36进制取值可以区分是否为数字。
position = listadd(position,listmul(direction.get(x[0]),int(x[1:3])))
#执行刚才定义的列表乘法和加法实现位置移动。
print(str(position[0])+","+str(position[1]))
#print(",".join([str(x) for x in position])) 亦可
查看12道真题和解析
CVTE公司福利 678人发布