You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python报错:int与list不支持+运算,求summer_69函数问题排查

分析与修复summer_69函数的问题

让我帮你一步步拆解这段代码的问题,以及对应的修复方案~

直接触发报错的原因

你遇到的unsupported operand type(s) for +: 'int' and 'list'错误,核心问题出在这行代码:

mylist.append(arr[start:end+1:])

你把**数组切片(本质是一个子列表)**直接加到了mylist中,导致mylist变成了「列表的列表」(比如输入[1,6,2,9]时,mylist会是[[6,2,9]])。当调用sum(mylist)时,Python尝试把这些子列表和整数相加,自然会抛出类型错误——sum()只能处理可迭代的数字类型,无法直接对列表求和。

其他隐藏的逻辑问题

除了直接报错的点,代码还有几个逻辑漏洞:

  • 未初始化变量的风险:如果输入数组里没有6,start和end从未被定义,运行到切片代码时会直接抛出NameError。
  • 判断顺序错误:你先判断x==9再判断x==6,这会导致刚遇到6时,end还没找到就执行切片操作,直接触发变量未定义的错误。
  • 无法处理多个6-9区间:代码找到第一个9就break了,若输入数组包含多个需要忽略的区间(比如[2,6,3,9,4,6,5,9]),后面的区间根本不会被处理。
  • 错误的切片时机:你在每次循环都尝试添加切片,但实际上应该是找到完整的6-9区间后,再一次性记录这个区间的内容,而非循环过程中反复添加。

修复后的实现方案

这里提供两种更可靠的实现方式:

方案1:用开关变量控制累加(推荐,逻辑更简洁)

通过一个布尔变量标记是否处于需要忽略的区间,遍历数组时只累加不在忽略区间内的数字:

def summer_69(arr):
    total = 0
    skip = False  # True表示当前处于6到9的忽略区间
    for num in arr:
        if num == 6:
            skip = True
            continue  # 跳过6本身
        if num == 9:
            skip = False
            continue  # 跳过9本身
        if not skip:
            total += num
    return total

方案2:基于原思路的修正(总和减去忽略区间的和)

如果坚持用「总和减忽略区间和」的思路,可以调整为找到所有6-9区间后,统一计算忽略的数值:

def summer_69(arr):
    ignore_nums = []
    i = 0
    while i < len(arr):
        if arr[i] == 6:
            # 找到当前6之后的第一个9的位置
            j = i + 1
            while arr[j] != 9:
                j += 1
            # 把6到9的所有数字加入忽略列表
            ignore_nums.extend(arr[i:j+1])
            i = j + 1  # 跳到9之后继续遍历
        else:
            i += 1
    return sum(arr) - sum(ignore_nums)

内容的提问来源于stack exchange,提问作者Chirag Lakhanpal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:15