某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0,y=0)并规定,每向东增加100米,x加1,每向北增加100米,y加1。同时,我军情报部门也破译了敌军向坦克发送的指挥信号,其中有三种信号(L,R,M)用于控制坦克的运动,L 和 R 分别表示使令坦克向左、向右转向,M 表示令坦克直线开进100米,其它信号如T用于时间同步,P用于位置较准。
一日,我军侦察兵发现了敌军的一辆坦克,侦察兵立即将坦克所在坐标(P, Q)及坦克前进方向(W:西,E:东,N:北,S:南)发送给指挥部,同时启动信号接收器,将坦克接收到的信号实时同步发往指挥部,指挥部根据这些信息得以实时掌控了该坦克的位置,并使用榴弹炮精准地击毁了该坦克。
请设计合理的数据结构和算法,根据坦克接收到的信号,推断出坦克所在的位置。
设计时请考虑可能的扩展情况,并体现出您的设计风格。
假设,侦察兵发送给指挥部的信息如下:
坦克坐标:(11,39)
坦克运行方向:W
坦克接收到的信号为:MTMPRPMTMLMRPRMTPLMMTLMRRMP
其位置应该是(9,43),运动方向为E
class Tanke(object): def __init__(self,x,y,ori): self.x = x self.y = y self.ori = ori def move(self,arg): ls = ['E','N','W','S'] q = ls.index(self.ori) if arg == 'L': q += 1 q = q%4 self.ori = ls[q] elif arg == 'R' : q -= 1 q = q%4 self.ori = ls[q] if arg == 'P' or arg == 'T': pass if arg == 'M' : if ls[q] == 'W' : self.x -= 1 elif ls[q] == 'N' : self.y +=1 elif ls[q] == 'E' : self.x += 1 elif ls[q] == 'S' : self.y -= 1 tanke = Tanke(11,39,'W') p = 'MTMPRPMTMLMRPRMTPLMMTLMRRMP' o = 0 for i in p : tanke.move(i) print('坦克坐标是({},{}),方向是{}'.format(tanke.x, tanke.y, tanke.ori)) o += 1 print() print('*************************') print(o,len(p)) print('*************************') print('坦克坐标是({},{}),方向是{}'.format(tanke.x,tanke.y,tanke.ori))
.python代码得到列表list的交集与差集
交集
b1=[1,2,3] b2=[2,3,4] b3 = [val for val in b1 if val in b2] print b3
map、reduce、filter的用法和区别
map函数是对一个序列都执行同一个函数
reduce函数是对一个可迭代对象中的第一项和第二项执行一个函数,在将函数返回值和第三项进行函数运算,函数内有两个参数
filter函数是对一个可迭代对象进行函数运算,将返回True的项输出出来,函数的返回值只能是True或False