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
相关产品推荐
相关产品推荐

