首页 > 解决方案 > 返回数组中数字的总和,忽略数字部分除外

问题描述

SUMMER OF '69:返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 9 的数字部分(每个 6 后面至少有一个 9)。如果没有数字,则返回 0。

summer_69([1, 3, 5]) --> 9
summer_69([4, 5, 6, 7, 8, 9]) --> 9
summer_69([2, 1, 6, 9, 11]) -- > 14

def summer_69(arr):
    if 6 in arr and 9 in arr:
        return sum(arr[:arr.index(6)])+sum(arr[arr.index(9):])
    else:
        total=0
        for x in arr:
            total+=x
    return total

我期望summer_69的输出([4, 5, 6, 7, 8, 9]) --> 9,但实际输出是18。
我期望summer_69的输出([2, 1, 6, 9,11 ]) --> 14,但实际输出为 23

标签: arrayspython-3.xfunction

解决方案


您可以通过删除 6 到 9 之间的所有项目(对于所有间隔)并总结剩余列表中的元素来做到这一点。

要删除 6 到 9 之间的部分,您可以使用slice() Function

slice() function返回一个切片对象。

切片对象用于指定如何对序列进行切片。您可以指定切片的开始位置和结束位置。

def summer_69(arr):
    while 6 in arr: # while 6 in array
        idx6 = arr.index(6)
        idx9 = arr.index(9)
        del arr[idx6:idx9+1] # delete part of array between index of 6 and index of 9
        print (arr) # [4, 5, 1, 1, 4, 3]
    return sum(arr)


print (summer_69([4, 5, 6, 7, 8, 9,1,1,6,2,3,9,4,3]))

输出:

18

前任。

print (summer_69([1, 3, 5])) # 9
print (summer_69([4, 5, 6, 7, 8, 9])) # 9
print (summer_69([2, 1, 6, 9, 11])) # 14

推荐阅读