首页 > 解决方案 > 为什么我的尝试无法捕捉到“6”-“7”的两种模式?_Sum67_python 编码

问题描述

我大约一个月前才开始编码,目前我对这个问题有疑问:

“返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 7 的数字部分(每个 6 后面至少有一个 7)。返回 0 表示没有数字。”

我的尝试如下:

def sum67(nums):

    summe=0
    
    if 6 not in nums:
        for elem in nums:
            summe+= elem
    else:
      indexof_6= nums.index(6)
      indexof_7= nums.index(7)
      copynums= nums[:]
      del(copynums[(indexof_6) : (indexof_7+1)])
      for i in copynums: 
          summe+= i
    return summe

不幸的是,它只返回像 [2,3,4,6,7,9] 这样只有一个 6 的列表的正确值。而当有多个 6 例如 [5,6,10,7, 5,6,9,7,1] 时,它会返回错误值。

我已经尝试在网上寻找不同的解决方案,但我似乎不理解它们......我对“.index()”的尝试是错误的吗?这个只能捕获“6”的第一个索引吗?

对于如何纠正自己的一些提示,我将非常感激:) 非常感谢!亲切的问候

标签: pythonindexing

解决方案


是的,index只返回第一个匹配的索引。一种选择是在 a 存在时继续删除元素,6然后在最后对它们求和:

def sum67(nums):
    while 6 in nums:
        del nums[nums.index(6):nums.index(7) + 1]
    return sum(nums)

请注意,这有点低效,可以通过循环并维护一个布尔标志来加速:

def sum67(nums):
    should_add = True
    total = 0
    for num in nums:
        if num == 6:
            should_add = False
        if should_add:
            total += num
        elif num == 7:
            should_add = True
    return total

推荐阅读