Python:列表中是否包含连续的三个整数,它们的和为7?

3

我正在准备申请编程训练营的资料,以下是一道我遇到困难的练习题(使用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

当我运行时
lucky_sevens([2, 1, 5, 1, 0])

它打印出False,我认为是因为它只考虑了0、1和2位置上的元素(总和为8,而不是所需的7)。

它应该打印True,因为第1、2和3个位置上的元素之和为7。(1 + 5 + 1 = 7)。

请问有人能提供建议吗?我将非常感激。


1
可能相关:https://en.wikipedia.org/wiki/Subset_sum_problem - Tyler
谢谢你的链接,@Tyler。非常有趣。 - allardbrain
4个回答

2
是的,对于您的情况,它只考虑第一个、第二个和第三个元素。这是因为您的函数中没有任何循环。
在Python中,循环结构包括“for”和“while”。因此,您需要使用其中之一。
我可以给你一些提示来解决问题,但不会提供完整的代码(否则你怎么学习呢?)-
1. 您需要遍历从第一个索引(0)到len(numbers) -2 的索引。一个可以帮助您完成此操作的简单函数是enumerate(),当您使用for循环迭代时,它会输出索引以及实际元素(如果您正在使用enumerate,则需要放置一个条件来检查索引是否小于len(numbers) - 2)。
2. 然后,您应该获取index+1位置和index+2位置的元素,将它们相加并检查是否等于7,如果是,则应返回True
3. 许多人犯的一个常见错误是,如果未满足上述(2)条件,则返回False,但实际上您需要做的是仅在没有匹配项时才返回它(在函数末尾)。

1
谢谢!是的,另一个发帖者也指出我正在使用“if”而不是循环。唉! - allardbrain

1
你需要循环遍历列表以评估所有元素。在你的代码中,你只评估了前3个元素。

你说得对,我使用了“if”而不是“for”。谢谢! - allardbrain

1

试试这个:

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

你的代码无法工作是因为你没有循环它,你只检查了列表中的前3个元素。

2
如果最后两个数字之一是7,或者最后两个数字的和为7,则此操作将失败。 - Tyler
1
你的变量名有拼写错误:应该是numbers,而不是number。 - Reblochon Masque
@ReblochonMasque 谢谢,已修复。 - RobertR

0

使用递归怎么样?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接