面试题

某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(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
原文地址:https://www.cnblogs.com/mabaohua/p/10178984.html