当前位置: 高中信息技术 / 综合题
  • 1. (2023高三上·嘉兴月考) 机器人移动路线管理。机器人在一平面内按照程序预置数据来完成移动操作(如图a所示),规则如下:①只能水平或垂直方向移动,方向取值:上:U、下:D、左:L.右:R,不能走斜线;每次移动1-5单位距离;②从起点出发,经过若干步后,尽可能返回到起点,如不能自动返回,则计算剩余移动次数。

    1. (1) 解决上述问题的主程序如下:

      bp=startpos ( )    #输入起点坐标

      dirt = []          #移动方向

      step =[]          #移动距离

      readdata ()        #从data. csv文件中读取移动数据

      pos=[bp]         #从起点开始存储所有经过点的x、y坐标

      for i in range (0, 1en (dirt)):        #利用预置数据移动

          tmp = move (pos[i], dirt[i], step[i])

          pos. append (tmp)

      print ("经过的位置点如下所示: ","\n", pos)

      if tmp ==    #判断能否返回起点

          print("可以直接返回起点位置!")

      else:

          print("不能直接返回起点位置!", end=")

          stpx=gettimes (pos[0] [0], pos[-1][0])

          stpy=gettimes (pos[0][1], pos[-1][1])

      print("至少需要移动"+ str(stpx+stpy) +"次才能返回起点位置!")

    2. (2) 编写函数startpos( ),功能为输入起点坐标,返回坐标的值,返回值类型为列表。代码如下:

      def startpos( ):

          x=int(input('输入起点的x坐标:'))

          y=int(input('输入起点的y坐标:'))

      return

    3. (3) 编写readdata()过程,功能为从CSV文件中读取预置的移动数据。代码如下:

      def readdata( ):

          import csv

          f=open(" data. csv", "r", encoding="utf-8 ")

          f_ csv = csv.reader (f)

          title = next(f_csv) #标题行

          for line in f_csv:

              dirt. append (1ine[0])

              step.appnd()

      f.close( )

    4. (4) 编写位置移动函数move( ),实现计算移动到的新位置。代码如下:

      def move(pos, dr, lg):    #位置移动

          new_ pos = [0, 0]

          if dr == "U":

              x =0; y=1

          elif dr = "D":

              x=0; y=-1

          elif dr = "L":

              x =-1; y=0

          elif dr="R":

              x=1; y=0

          new_ pos[0] = pos[0]+x*lg

          ,

      return new_ pos

    5. (5) 编写函数gettimes( ),计算剩余移动次数。代码如下:

      def gettimes(p1, p2) :

          p=abs(p1-p2)//5

          if abs(p1-p2)%5!=0:

               

      return p

微信扫码预览、分享更方便