【问题标题】:Problem Iterating through a 2d array using nested for loop and returning index使用嵌套 for 循环和返回索引遍历二维数组的问题
【发布时间】: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 并尝试诊断您的代码在做什么以及与您的期望有什么不同。这里的代码存在多个问题,如果研究得当,每个问题都可能是自己的问题,但这些问题可能已经存在重复。

标签: python loops indexing


【解决方案1】:

您的spots 参数是一个列表列表,但您似乎希望它神奇地确定您有时希望它为您提供坐标(for x in spotsfor y in spots),有时包含特定值(if spots == 'R' , ...)。

您将需要使用索引(例如spots[x][y])来获取列表和范围列表中的各个值(或枚举)以获取行和列的索引。

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 2021-04-05
    • 1970-01-01
    • 2021-11-20
    • 2014-12-22
    • 2017-03-10
    • 2015-10-02
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多