这里我有一个关于机器人路径的代码。问题的描述是这样的。
机器人
我们有一个机器人,它位于无限平面内,坐标为(x,y),面向方向r,其中0 <=r <=3,r的可能值有如下含义。
(north)
0
(west) 3 1 (east)
2
(south)
写一个函数final_destination(p,s) 其中参数p是机器人的当前位置,即一个三联体(x,y,r);参数s是一个字符串,可以包含下列字母:
该函数应返回机器人的最终位置,即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)?
首先,在你的第一个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应该可以解决这个问题。
一般建议。为了解决这个问题 'R'
和 'L'
你可以使用modulo。
if c == 'R':
r += 1
r = r % 4
elif c== 'L':
r -= 1
r = r % 4
这可以解决3和0的情况,并使代码更整洁,在我看来。