编写Tribonacci程序遇错误:unsupported operand type(s) for +: 'int' and 'list'
问题分析与修复
错误原因
你代码里的核心问题是array.append(signature)——这会把整个初始列表[1,1,1]作为单个元素塞进array,导致array一开始是[[1,1,1]]。后续循环又往里面加单个整数,最终array变成[[1,1,1], 1, 1, 1]。当i=3时,sum(array[i-3:i])相当于对[[1,1,1],1,1]求和,这里面既有列表又有整数,自然会触发unsupported operand type(s) for +: 'int' and 'list'的错误。
另外循环逻辑也有偏差:range(n)会执行n次循环,但你期望输出长度为n的序列,当前逻辑会生成多余元素。
修复后的代码
def tribonacci(signature, n): # 初始化结果数组为初始序列的副本,避免修改原输入 array = signature.copy() # 循环生成元素,直到数组长度达到n while len(array) < n: # 取最后三个元素求和得到下一个数 next_num = sum(array[-3:]) array.append(next_num) # 处理n小于3的边界情况(比如n=0返回空列表,n=2返回前两个初始元素) return array[:n] print(tribonacci([1,1,1], 4)) # 输出: [1, 1, 1, 3]
关键修改点
- 用
signature.copy()初始化结果数组,确保数组里全是单个整数元素,不会混入列表 - 用
while len(array) < n控制循环,逻辑更直观,精准生成到目标长度 - 用
array[-3:]直接取最后三个元素,无需计算索引,简洁不易错 - 兼容n小于3的边界场景,比如输入n=2时返回
[1,1]
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

