【发布时间】:2021-11-08 17:43:47
【问题描述】:
我们需要编写一个名为whereCanIPark() 的函数,它返回车辆可用停车位的坐标,如果没有可用停车位则返回false。我们的函数接收代表停车位的列表列表,以及正在寻找停车位的车辆类型的字符串。
有三种可能的车辆:普通汽车、小型汽车和摩托车。
普通车只能停在 R 点。 小型车可以停在 R 或 S 点。 摩托车可以停在 R、S 或 M 点。 在停车位列表中,停车位用小写和大写写成。大写字母表示特定地点可用,而小写字母表示地点不可用。
我们的函数必须以[X, Y] 对的形式返回一个包含该点坐标的列表。我用测试编写的代码如下:它应该打印坐标4,0,但我得到False。
def whereCanIPark(spots, vehicle):
for y in spots:
for x in spots:
if vehicle == "regular" and spots == "R":
return [x,y]
elif vehicle == "small" and spots == "S" or spots == "R":
return [x,y]
elif vehicle == "motorcycle" and spots == "S" or spots == "R" or spots == "M":
return [x,y]
else:
return False
print(whereCanIPark(
[
# COLUMNS ARE X
# 0 1 2 3 4 5
['s', 's', 's', 'S', 'R', 'M'], # 0 ROWS ARE Y
['s', 'M', 's', 'S', 'r', 'M'], # 1
['s', 'M', 's', 'S', 'r', 'm'], # 2
['S', 'r', 's', 'm', 'r', 'M'], # 3
['S', 'r', 's', 'm', 'r', 'M'], # 4
['S', 'r', 'S', 'M', 'M', 'S'] # 5
],
'regular'
))
【问题讨论】:
-
用你自己的话来说,当你做
vehicle == "regular" and spots == "R"时,你期望这个条件会得到满足吗?为什么? (提示:代码中此时spots的值是多少?是字符串吗?) -
用您自己的话说,当您在其中执行
for x in spots:和for y in spots:时,您期望x的值是什么样的?你认为y的值是什么样的?现在,测试一下。你的期望得到满足了吗?为什么或为什么不? -
用你自己的话说,当你调用一个函数时,从同一个函数调用中
return可能有多少次?对你的逻辑有什么影响?您需要找到所有个可用位置,还是只找到第一个一个? -
您好,卡尔,感谢您的提问。我认为条件将在第一个大写 R 处满足,即 4,0。我仍在尝试将我的大脑包裹在函数上,但是 x 的值会是一个子列表。我认为函数只能返回一次,你是对的,我们只需要找到第一个可用的位置。
-
请阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 并尝试诊断您的代码在做什么以及与您的期望有什么不同。这里的代码存在多个问题,如果研究得当,每个问题都可能是自己的问题,但这些问题可能已经存在重复。