我正在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 == 4
,divs == False
,因此您将触发以下逻辑:if not divs:
return i
但是,如果每一跳都碰到障碍,而您却没有
divs == False
,答案就是跳整件事!在此问题中,“整个事物”是max(inputArray)+1
的长度关于python - Codefights:避免障碍,在函数内部多次返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48390381/