【问题标题】:Python: Does list contain 3 consecutive integers that sum to 7?Python:列表是否包含 3 个连续整数,总和为 7?
【发布时间】:2015-09-25 01:45:30
【问题描述】:

我正在为我的编码训练营申请准备材料。这是我正在努力解决的一个实践问题(使用 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)。

谁能给点建议?我将不胜感激。

【问题讨论】:

标签: python list sum


【解决方案1】:

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

在 Python 中,循环结构是 forwhile 。所以你需要使用任何一个。

我可以给你一些提示,而不是提供完整的代码(否则你将如何学习?)-

  1. 您需要遍历从第一个索引 (0) 到 len(numbers) -2 的索引。一个可以帮助您执行此操作的简单函数是 enumerate() ,它在使用 for 循环对其进行迭代时吐出索引以及实际元素(如果您使用的是 enumerate ,则需要设置一个条件来检查该索引应小于len(numbers) - 2)。

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

  3. 很多人犯的一个常见错误是如果不满足上述(2)条件,则返回False,但实际上您需要做的是仅在根本没有匹配项时才返回它(在函数结束)。

【讨论】:

  • 谢谢!是的,另一张海报也指出我使用的是“if”而不是循环。哦!
【解决方案2】:

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

【讨论】:

  • 你说得对,我用的是'if'而不是'for'。谢谢!
【解决方案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 个元素。

【讨论】:

  • 如果最后两个数字之一是 7,或者如果最后两个数字总和为 7,这将失败
  • 你的变量名有错别字:是数字,不是数字
  • @ReblochonMasque 谢谢,已修复。
【解决方案4】:

使用递归怎么样?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多