python常见面试题

笔试题:

某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(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 Tank(object):

   """创建坦克类"""

   def __init__(self,x,y,fx):

       """

       x:坦克初始横坐标

       y:坦克初始纵坐标

       fx:坦克初始方向

       """

       self.x=x

       self.y=y

       self.fx = fx


   def directon(self,direct):

       #通过"L","R"确定坦克方向的函数

       list1 = ['N', 'W', 'S', 'E']

       #东南西北四个方向列表

       direct_index = list1.index(self.fx)

       #根据坦克方向获取下标

       if direct == 'L':

           direct_index = list1.index(self.fx) + 1

           #如果信号为“L”,坦克下标+1

           if direct_index == 4:

                direct_index = 0

                #如果坦克下标超过列表最大下标,从开始位置再循环

       if direct == 'R':

           direct_index = list1.index(self.fx) - 1

           #如果信号为“R”,坦克下标-1

           if direct_index == -1:

                direct_index = 3

                #如果坦克下标超过列表最小下标,从结束位置再循环

       self.fx = list1[direct_index]

       #坦克方向由最终下标确定


   def distance(self):

       #通过运动方向确定坐标的变化函数

       coord = (self.x, self.y)

       #坦克坐标

       if self.fx == 'E':

           #如果方向为“E",x轴+1

           self.x = self.x + 1

       elif self.fx == 'N':

           #如果方向为“N",y轴+1

           self.y = self.y + 1

       elif self.fx == 'W':

           #如果方向为“W",x轴-1

           self.x = self.x - 1

       elif self.fx == 'S':

           #如果方向为“S",y轴+1

           self.y = self.y - 1

   def run(self,move):

       #根据接收条件调用方法

       for i in move:

           #遍历收到当前的信号

           if i=='M':

                self.distance()

           if i == 'L' or i =='R':

                self.directon(i)

       return '坐标为(%d,%d),方向为%s'%(self.x,self.y,self.fx)



tank = Tank(11,39,'W')

print(tank.run('MTMPRPMTMLMRPRMTPLMMTLMRRMP'))

你可能感兴趣的:(python常见面试题)