斐波那契函数开发:解决输入0或-1时的NameError问题
修复斐波那契数列函数的问题
你的代码目前存在两个核心问题:
- 未处理负索引场景,不符合需求中"负索引返回-1"的要求
- 当输入
n=0或n=1时,循环range(1,n)不会执行,变量c从未被定义,直接返回会触发NameError
以下是修复后的完整代码:
def fibonacci(n): # 优先处理负索引,直接返回-1 if n < 0: return -1 # 处理数列起始的基础索引 if n == 0: return 0 if n == 1: return 1 a = 0 b = 1 # 从第2项开始循环计算,循环次数对应剩余项数 for _ in range(n - 1): c = a + b a = b b = c return b if __name__ == '__main__': start_num = int(input()) print(f'fibonacci({start_num}) is {fibonacci(start_num)}')
关键修改说明:
- 新增负索引判断:函数开头直接检查索引是否为负,满足需求的同时提前终止不必要的计算
- 单独处理基础项:
n=0和n=1是数列的起始项,无需进入循环,直接返回对应值避免变量未定义问题 - 调整循环范围:将
range(1,n)改为range(n-1),确保循环次数与需要计算的项数匹配,保证结果准确 - 移除全局变量声明:
c仅作为循环内的临时计算变量,不需要声明为全局变量,避免全局命名空间污染
测试边界场景验证:
- 输入
-3→ 返回-1 - 输入
0→ 返回0 - 输入
1→ 返回1 - 输入
6→ 返回8(数列:0,1,1,2,3,5,8,第6项为8)
内容的提问来源于stack exchange,提问作者Mount Dew
相关产品推荐
相关产品推荐

