Python:列表是否包含3个连续的整数,其总和为7?

Python:列表是否包含3个连续的整数,其总和为7?,python,list,sum,Python,List,Sum,我正在准备参加编码训练营的申请材料。这是一个我正在努力解决的实践问题(使用Python): “编写一个函数‘lucky_sevens(numbers)’,该函数接收整数列表,如果任意三个连续元素的总和为7,则打印True。”。 确保代码正确检查数组的第一个和最后一个元素。“ 我知道如何一次循环一个数组中的一个元素,但不知道如何“保持”一个元素,同时根据此提示评估与第一个元素相关的第二个和第三个元素。从我下面的尝试中可以看出,我不确定何时/何地/如何增加索引值来搜索整个列表 def lucky_s

我正在准备参加编码训练营的申请材料。这是一个我正在努力解决的实践问题(使用Python):

“编写一个函数‘lucky_sevens(numbers)’,该函数接收整数列表,如果任意三个连续元素的总和为7,则打印True。”。 确保代码正确检查数组的第一个和最后一个元素。“

我知道如何一次循环一个数组中的一个元素,但不知道如何“保持”一个元素,同时根据此提示评估与第一个元素相关的第二个和第三个元素。从我下面的尝试中可以看出,我不确定何时/何地/如何增加索引值来搜索整个列表

def lucky_sevens(numbers):

index1 = 0   # For assessing 1st of 3 numbers
index2 = index1 + 1   # For assessing 2nd of 3 numbers
index3 = index2 + 1   # For assessing 3rd of 3 numbers

# If all index values are within the list...
if index1 <= (len(numbers) - 2) and index2 <= (len(numbers) - 1) and index3 <= len(numbers):
    # If the values at those indices sum to 7...
    if numbers[index1] + numbers[index2] + numbers[index3] == 7:
        print True
    else:
        print False
    # I think the increments below may be one of the places I am incorrect
    index1 += 1
    index2 += 1
    index3 += 1
我认为这是错误的,因为它只考虑第0、第1和第2个位置的元素(根据需要求和到8,而不是7)

它应该打印为True,因为第一、第二和第三位置的元素总和为7。(1 + 5 + 1 = 7).


有人能提供一个建议吗?非常感谢。

您需要在列表中循环以评估所有元素。在代码中,只计算前3个元素。

尝试以下方法:

def lucky_sevens(numbers):
    for i in range(0, len(numbers)):
        if sum(numbers[i:i + 3]) == 7:
            print True
            return
    print False

你的不起作用的原因是因为你没有循环它,你只检查列表中的前3个元素。

是的,对于你的情况,它只考虑第一、第二和第三个元素。这是因为函数中没有任何循环

Python中的循环结构是
for
while
。因此,您需要使用其中任何一个

我可以给你一些关于这个问题的提示,而不是提供完整的代码(否则你怎么学习?)-

  • 您需要循环遍历从第一个索引(0)到
    len(number)-2的索引。一个简单的函数可以帮助您做到这一点,它在使用
    for
    循环迭代时吐出索引和实际元素(如果您使用的是enumerate,则需要设置一个条件来检查索引是否应小于
    len(numbers)-2

  • 然后,您还应该从
    index+1
    pos和
    index+2
    位置获取元素,并将它们相加,检查它们是否等于
    7
    ,如果是,您应该返回
    True

  • 许多人犯的一个常见错误是,如果不满足上述(2)条件,则返回
    False
    ,但实际上,您需要做的是仅在完全没有匹配项时(在函数末尾)才返回它


  • 使用递归怎么样

    def lucky_sevens(numbers, index=0):
        if index <= len(numbers):
            if sum(numbers[index:index + 4]) == 7:
                return True
            else:
                index += 1
                return lucky_sevens(numbers[1:], index)
        return False
    
    def lucky_seven(数字,索引=0):
    
    如果索引可能相关:谢谢你的链接,@Tyler。很有意思。如果最后两个数字中的一个是7,或者如果最后两个数字加起来是7,则此操作将失败。您的变量名有拼写错误:是数字,不是number@ReblochonMasque谢谢,修正了。你说得对,我用了“如果”而不是“为了”。非常感谢。非常感谢。是的,另一张海报也指出我用的是“如果”而不是循环。哦!
    def lucky_sevens(numbers, index=0):
        if index <= len(numbers):
            if sum(numbers[index:index + 4]) == 7:
                return True
            else:
                index += 1
                return lucky_sevens(numbers[1:], index)
        return False