Codefights:avoidObstacles,在函数内多次返回

时间:2018-01-22 21:15:37

标签: python return

我正在codefights.com上练习编码。这是一个链接,可以看到他们要求的内容:link。我很难理解这些返回语句在下面的代码中真正做了什么。

我的代码:

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”。

如果有人能一步一步地指导我,我真的很感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

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

pipeline {
  agent {
    kubernetes {
      //cloud 'kubernetes'
      label 'mypod'
      containerTemplate {
        name 'maven'
        image 'maven:3.3.9-jdk-8-alpine'
        ttyEnabled true
        command 'cat'
      }
    }
  }
  stages {
    stage('Run maven') {
      steps {
        container('maven') {
          sh 'mvn -version'
        }
      }
    }
  }
}

你可以想象这些是跳跃长度。您可以看到跳跃长度为" 1"将击中每一个障碍,但跳跃长度为" 2"只能击中6号障碍物。

关于第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', []) 关键字的来源,基本上是这样的True / False:

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

的长度

答案 1 :(得分:1)

def avoidObstacles(inputArray):
    for i in range(2, max(inputArray)):
        quantity = 0
        for x in inputArray:
            if x % i == 0:
                break
            quantity +=1
        if quantity == len(inputArray):
            return i
    return max(inputArray) + 1

inputArray 中,避免障碍的最小步长为2,最大可以为最大数,为什么循环是for i in range(2, max(inputArray))

对于 inputArray 中的每个元素,我检查其是否除以 step (循环中的变量 x ),如果没有,则增加数量加1。如果 quantity 等于 inputArray 的长度,例如 inputArray 中的none元素不除以 step ,因此需要 step 。如果此循环为空,则需要返回 max(inputArray)+ 1 作为最小的可行步骤,以避免所有障碍。