Python编写斐波那契程序遇TypeError: 'set' object is not callable求助
问题分析与解决方案
错误根源
你代码里的allNums = {1, 1}定义的是集合(set),集合的特性是无序、元素唯一,既不支持通过索引(如allNums[currentIndex - 1])访问元素,也不允许用allNums[currentIndex] = nextIndex这种方式添加元素。报错TypeError: 'set' object is not callable本质是集合不支持索引操作,你误以为它像列表一样可以按位置访问。
至于你说笔记本运行正常,大概率是代码不一致(比如笔记本上实际用的是列表),因为集合的索引操作在任何Python环境下都会触发错误。
修复方案
将存储斐波那契数的容器改为列表(list),列表是有序结构,支持索引访问和动态添加元素。
修改后的代码:
allNums = [1, 1] # 改为列表 while len(allNums) < 35: currentIndex = len(allNums) nextIndex = allNums[currentIndex - 1] + allNums[currentIndex - 2] allNums.append(nextIndex) # 用append添加元素更直观 print(nextIndex)
补充说明
- 列表的索引从0开始,初始的
[1,1]对应斐波那契数列的前两项,len(allNums)会随着元素添加动态增长,完全匹配你的循环逻辑。 - 如果坚持想用索引赋值的方式(比如
allNums[currentIndex] = nextIndex),也是可行的,因为列表支持扩展索引赋值,不过append()是更符合Python风格的写法。
内容的提问来源于stack exchange,提问作者Fprime
相关产品推荐
相关产品推荐

