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

2024-09-26 18:01:31 发布

您现在位置:Python中文网/ 问答频道 /正文

Write a function lucky_sevens(numbers), which takes in an array of integers and returns true if any three consecutive elements sum to 7.

为什么这不产生真的输出?最后3个值总和=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]))

Tags: andofinanwhichreturniffunction
3条回答

像这样简单的事怎么样

    def lucky_sevens(numbers):

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

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

                return True

        return False

或者用你的原始代码,清理一下。在

^{pr2}$

错误出现在while循环中。当您循环时,sum_of_numbers保持不变。相反,您必须为while循环中的每个新的x和{}更新它。在

还有一些重复的东西,比如else: return False,可以简化为return False,因为它只能在{}为False时到达那一行。在

最后,x = x + 1可以用更常见的速记x += 1来写,y = y + 1也是如此。在

问题是当函数第一次被调用时,sum_of_numbers变量被分配了列表中前3个值之和的值,并且从未用新的xy值更新,您可能需要创建一个回调函数来实现该行为。在

现在,您需要将sum语句移动到while循环中,以便使用新的xy值更新总和:

def lucky_sevens(numbers):
    result = False
    x, y = 0, 3

    while (y <= len(numbers)):
        if sum(numbers[x:y]) == 7:
            result = True
            break
        x += 1
        y += 1
    return result

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

这应该能做到:

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语句。在

如果你想使用你的原始代码,你只需要做一些调整。你的逻辑就在那里,只是需要清理一下。在

^{pr2}$

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

相关问题 更多 >

    热门问题