题解 | #坐标移动#

坐标移动

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])) 亦可

全部评论

相关推荐

10-29 19:42
门头沟学院 Java
点赞 评论 收藏
分享
Sigma429:极兔啊,薪资开的巨低,还在上海,索性不做笔试了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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