函数返回非预期值

问题描述 投票:0回答:2

这里我有一个关于机器人路径的代码。问题的描述是这样的。

机器人

我们有一个机器人,它位于无限平面内,坐标为(x,y),面向方向r,其中0 <=r <=3,r的可能值有如下含义。

      (north)
         0 
(west) 3   1 (east)
         2
      (south)

写一个函数final_destination(p,s) 其中参数p是机器人的当前位置,即一个三联体(x,y,r);参数s是一个字符串,可以包含下列字母:

  • 'R'... 向右转(90°)。
  • 'L'......向左转(90°)。
  • "F"......前进1个单位。

该函数应返回机器人的最终位置,即atriple(x',y',r')。

举例说明。

>>> final_destination((2, 0, 0), 'FFRFFLFFL')
(4, 4, 3)
>>> final_destination((2, -1, 0), 'FFFRFFFRFFFRFFFR')
(2, -1, 0)

我写了以下代码

def final_destination(p, s):
   x, y, r = p[0], p[1], p[2]
   for c in s:
      if c == 'F' and r == 0:
          x += 1
      if c == 'F' and r == 1:
          x += 1
      if c == 'F' and r == 2:
          y -= 1
      if c == 'F' and r == 3:
          x -= 1
      if c == 'R' and r == 3:
          r = 0
      if c == 'R' and r != 3:
          r += 1
      if c == 'L' and r == 0:
          r = 3
      if c == 'L' and r != 0:
          r -= 1
  return x, y, r

然后

 print(final_destination((2, -1, 0), 'L'))

我得到的结果是(2,-1,2)。为什么函数没有返回(2,-1,3)?

python
2个回答
1
投票

首先,在你的第一个if语句中

if c == 'F' and r == 0:
      x += 1

应该是y += 1。

你应该把if语句写成if, else if这样的条件。在 python 中写成 if (condition): --- elif (condition) --- ---

例。

if c == 'F' and r == 0:
      x += 1
elif c == 'F' and r == 1:
      x += 1

你的测试用例属于第二个到最后一个if条件,那么既然更新r为3,就属于下面(最后一个)if条件。if then else应该可以解决这个问题。


0
投票

一般建议。为了解决这个问题 'R''L'你可以使用modulo。

if c == 'R':
    r += 1
    r = r % 4
elif c== 'L':
    r -= 1
    r = r % 4

这可以解决3和0的情况,并使代码更整洁,在我看来。

© www.soinside.com 2019 - 2024. All rights reserved.