我正在codefights.com上练习编码。这里是一个链接,可查看他们的要求:link。我很难理解下面的代码中这些return语句的实际作用。

我的代码:

def avoidObstacles(inputArray):

    for i in range(1, max(inputArray)):
        divs = any([x for x in inputArray if not x%i])
        if not divs:
            return i

    return max(inputArray) + 1


我不明白return max(inputArray) +1如何给出正确的答案。

例如:
inputArray = [5,3,6,7,9]应该返回“ 4”。

如果有人可以逐步引导我,我将不胜感激。
谢谢!

最佳答案

我将尝试为您可视化代码以显示其工作原理:

>>> for i in range(1, max(inputArray)):
...     print("hop " + str(i),[x for x in inputArray if not x%i])
...
('hop 1', [5, 3, 6, 7, 9])
('hop 2', [6])
('hop 3', [3, 6, 9])
('hop 4', [])
('hop 5', [5])
('hop 6', [6])
('hop 7', [7])
('hop 8', [])


您可以想象这些是跳长度。您可以看到跳跃长度“ 1”将击中每个障碍物,但是跳跃长度“ 2”仅会击中6号障碍物。

请注意,在跃点4上,数组中没有任何内容。这是any关键字出现的地方,基本上可以使它成为对/错:

>>> for i in range(1, max(inputArray)):
...     print(any([x for x in inputArray if not x%i]))
...
True
True
True
False
True
True
True
False


您可以在代码执行时看到i == 4divs == False,因此您将触发以下逻辑:

if not divs:
        return i


但是,如果每一跳都碰到障碍,而您却没有divs == False,答案就是跳整件事!在此问题中,“整个事物”是max(inputArray)+1的长度

关于python - Codefights:避免障碍,在函数内部多次返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48390381/

10-15 20:41