首页 > 解决方案 > 有没有办法找到9结束后的数字总和?

问题描述

问题是:

返回数组中数字的总和,但忽略以 6 开头并延伸到下一个 9 的数字部分(每个 6 后面至少有一个 9)。

六十九([4, 5, 6, 7, 8, 9]) --> 9

Sixty_nine([4, 5,7,8, 6, 7, 8, 9,34]) --> 它应该返回 -- 58 但它返回 -- 24(忽略 34)

我无法理解如何取 9 之后的数字总和

arr  = [4, 5,7,8, 6, 7, 8, 9,34]
def sixty_nine(arr):
    sums = 0
    l = len(arr)
    for i in range(l):
         if arr[i] == 6 and 9 in arr[i:]:              
            for j in arr[0:i]:
                sums = sums + j
            return sums


sixty_nine(arr)

t=这个程序的输出是--- 24

标签: python-3.x

解决方案


您的代码包含各种错误,其中您在 for 循环中返回,这会阻止它遍历整个列表。

我建议分两步处理这个问题。首先编写一个过滤掉表单子列表的生成器[6, ..., 9]

然后使用sumwhich 可以总结任何可迭代的,包括在内的生成器。

def ignore_between(lst, a, b):
    i = 0
    while i < len(lst):
        if lst[i] == a:
            try:
                i = lst.index(b, i) + 1
                continue
            except ValueError:
                pass
        yield lst[i]
        i += 1

lst = [4, 5, 7, 8, 6, 7, 8, 9, 34]
output = sum(ignore_between(lst, 6, 9))
print(output) # 58

推荐阅读