首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >幸运七,数组== 7中连续3个数字之和

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

Stack Overflow用户
提问于 2016-11-29 02:48:25
回答 7查看 2.5K关注 0票数 1

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

为什么这不能产生一个真实的输出?最后3个值和= 7。

代码语言:javascript
复制
 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]))
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-11-29 03:21:11

当函数第一次被调用时-- sum_of_numbers变量得到列表中前3个值之和的值,并且从未用新的xy值进行更新,您可能希望创建一个回调函数来实现这种行为。

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

代码语言:javascript
复制
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]))
票数 2
EN

Stack Overflow用户

发布于 2016-11-29 03:19:14

像这样简单的东西怎么样

代码语言:javascript
复制
    def lucky_sevens(numbers):

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

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

                return True

        return False

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

代码语言:javascript
复制
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

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

还有一些重复的东西,比如else: return False,可以简化为return False,因为只有当sum_of_numbers == 7是假的时候,它才能到达该行。

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

票数 1
EN

Stack Overflow用户

发布于 2016-11-29 04:35:43

这应该能起作用:

代码语言:javascript
复制
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在该列表中,那么就有三个连续的数字与7相加。否则就没有了。

有一点要注意的是,做这样的列表理解需要列表中包含三个以上的元素。这就是为什么if声明在那里。

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

代码语言:javascript
复制
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就可以用每个循环和每一个新的索引选择来更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40856975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档