幸运的七人组,数组中连续3个数字的总和== 7

时间:2016-11-29 02:48:25

标签: python

  

编写一个函数lucky_sevens(numbers),它接受一个数组   如果任何三个连续元素总和为7,则返回true。

为什么这不会产生True的输出?最后3个值sum = 7.

 def lucky_sevens(numbers):
      x, y = 0, 3
      sum_of_numbers = sum(numbers[x:y])
      while (sum_of_numbers != 7) and (y < len(numbers)):
        x = x + 1
        y = y + 1
      if sum_of_numbers == 7:
        return True
      else:
        return False

    print(lucky_sevens([1,2,3,4,5,1,1]))

7 个答案:

答案 0 :(得分:1)

那样简单
    def lucky_sevens(numbers):

        for x in range(len(numbers) - 2):

            if sum(numbers[x:x+3]) == 7:

                return True

        return False
   

或者使用原始代码,只需清理一下。

def lucky_sevens(numbers):

    if len(numbers) < 3:
        return False

    x, y = 0, 3

    sum_of_numbers = sum(numbers[x: y])

    while sum_of_numbers != 7 and y < len(numbers):
        x += 1
        y += 1
        sum_of_numbers = sum(numbers[x: y])

    if sum_of_numbers == 7:
        return True
    return False

您的错误来自您的while循环。当你循环时,sum_of_numbers保持不变。相反,您必须为while循环中的每个新xy更新它。

另外,else: return False这样的重复内容可以简化为return False,因为如果sum_of_numbers == 7为假,它只能到达该行。

最后,x = x + 1可以用更常见的简写x += 1编写,与y = y + 1相同。

答案 1 :(得分:1)

当函数首次被调用时,sum_of_numbers变量被分配了列表中前3个值之和的值,并且永远不会使用新的x {{{ 1}}值,您可能想要创建一个回调函数来实现该行为。

目前,您需要将y语句移至sum循环,以便使用新的whilex值更新总和:< / p>

y

答案 2 :(得分:0)

这应该是诀窍:

def lucky_sevens(numbers):
    if len(numbers) < 3:
        return False
    return 7 in [sum(numbers[i:i+3]) for i in range(0, len(numbers)-2)]

print(lucky_sevens([1,2,3,4,5,1,1]))
# True

列表推导将一次在列表中移动3个数字,并计算每组三个整数的总和。如果7在该列表中,那么有3个连续数字总和为7。否则,就没有了。

需要注意的是,进行此类列表理解需要列表中包含3个以上的元素。这就是if语句存在的原因。

如果您想使用原始代码,则只需进行一些调整即可。你的逻辑就在那里,只需要一点清洁。

def lucky_sevens(numbers):
  x, y = 0, 3
  sum_of_numbers = sum(numbers[x:y])
  while (sum_of_numbers != 7) and (y < len(numbers)):
    x = x + 1
    y = y + 1
    sum_of_numbers = sum(numbers[x:y])
  if sum_of_numbers == 7:
    return True
  else:
    return False

您只需在sum循环中重做while即可。这样,sum_of_numbers会更新每个循环和每个新的索引选择。

答案 3 :(得分:0)

此代码返回Array中的连续元素,其总和为7,并为初始元素的索引。

  function lucky_seven(arr){
    let i=0;
    let lastIndex = 0;
    if(arr.length < 3){
      return false;
    }
    while(i <= lastIndex){
      let sum = 0;
      lastIndex = i + 3;
      let subArr = arr.slice(i,lastIndex);
      if(subArr.length === 3) {
        sum = subArr.reduce((acc, cur) => acc + cur);
        if(sum === 7){
          return {
            subArr: subArr,
            index: i
          };
        }
        i++;
      } else{
        return false;
     }
    }
  }
lucky_seven([3,2,1,4,2])

答案 4 :(得分:0)

我只是用了这个

 def lucky_sevens(numbers):
        x = 0
        y = False
        for i in numbers:
            if i == 7:
                x += 7
                if x == 21:
                    y = True
            else:
                x = 0
        return y

答案 5 :(得分:0)

desc = [
    v["description"]
    for _, value in topHitsDict.items()
    for k, v in value.items()
    if "hit" in k
]

答案 6 :(得分:0)

这里有一些非常有趣的回复。以为我也会分享我的工作。

import numpy as np
import matplotlib.pyplot as plt

q = (135 / 56)
z = -(1 / 8)
r = -(2 / 7)
m = 7 / 8
p = 5 / 7
j = np.power(0.1, -3.5)
a = np.power(0.2, -3.5)

n = np.arange(-5, 6)
x = np.where(n < 0, q * np.power(0.9, n) + z * np.power(0.1, n) + r * np.power(0.2, n),
             np.where((n >= 0) & (n < 4), q * np.power(0.9, n) + m * np.power(0.1, n) + p * np.power(0.2, n),
                      q * np.power(0.9, n) + m * np.power(0.1, n) + p * np.power(0.2, n) + j + a))
plt.stem(n, x)
plt.show()

其输出将是:

def lucky_seven(num_list):
    if len(num_list) < 3: return False
    return any([True if sum(num_list[i:i+3]) == 7 else False for i in range(len(num_list)-2)])

print ('lucky seven for [1,2,3] is          :',lucky_seven([1,2,3]))
print ('lucky seven for [3,4] is            :',lucky_seven([3,4]))
print ('lucky seven for [3,4,0] is          :',lucky_seven([3,4,0]))
print ('lucky seven for [1,2,3,4,5,1,1] is  :',lucky_seven([1,2,3,4,5,1,1]))
print ('lucky seven for [1,2,3,4,-2,5,1] is :',lucky_seven([1,2,3,4,-2,5,1]))