Python 代码斗争:避免障碍,函数内的多重返回

Python 代码斗争:避免障碍,函数内的多重返回,python,return,Python,Return,我在codefights.com练习编码。这里有一个链接,可以查看他们的要求:。我很难理解这些返回语句在下面的代码中到底做了什么 我的代码: 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 retu

我在codefights.com练习编码。这里有一个链接,可以查看他们的要求:。我很难理解这些返回语句在下面的代码中到底做了什么

我的代码:

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

注意,在hop4上,数组中没有任何内容。这就是
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==4
divs==False
,因此您将触发此逻辑:

if not divs:   
        return i
然而,如果每一个单跳都碰到了障碍,那么你就永远不会有
divs==False
,答案就是跳过整个过程!在这个问题中,“整件事”是
max(inputArray)+1

def avoidobstacks(inputArray)的长度:
对于范围(2,最大值(输入阵列))内的i:
数量=0
对于输入阵列中的x:
如果x%i==0:
打破
数量+=1
如果数量==len(输入阵列):
返回i
返回最大值(输入阵列)+1
避开障碍物的最小步数是2,最大步数可以是输入阵列中的最大数,为什么在范围(2,最大(输入阵列))内的i的循环是


对于inputArray中的每个元素,我检查它是否除以步长(循环中的变量x),如果否,则将数量增加1。如果数量等于输入数组的长度,例如,输入数组中的任何元素都不能除以步长,则这一步是必需的。如果此循环为空,我们需要返回max(inputArray)+1作为最小可能步骤,以避免所有障碍。

正常,但
返回i
应返回4和8。我不知道
如何返回max(inputArray)+1
应该返回4。我不明白
return I
return max(inputArray)+1之间发生了什么事
。我更新了答案以便更清楚一点。请详细说明。这段代码是如何解决这个问题的。解释。@OrestisZekai我只是在我的答案中添加解释