自定义计算n个自然数和的函数报UnboundLocalError如何解决?
代码问题说明及修复方案
- 问题1:变量
s的作用域错误
报错
UnboundLocalError: local variable 's' referenced before assignment的核心原因是Python的作用域规则:只要你在函数内部对s做了赋值操作,Python默认会将s识别为函数局部变量,哪怕全局定义了同名的s也不会优先读取。你没有在函数内部初始化s,第一次执行累加时读取右侧的s就会触发报错。
更合理的写法是直接在函数内部初始化s=0,不要使用全局变量,避免不必要的变量污染。如果一定要用全局变量,需要在函数内部第一行加global s声明,但这种写法非常不推荐用于当前场景。
- 问题2:缩进错误,
break语句完全失效
你写的
if判断和break语句缩进层级和for循环同级,不属于循环体内的代码,for循环会完整遍历所有取值后才会走到if判断,break不在循环体内也无法执行,属于语法逻辑错误。
- 问题3:求和逻辑错误,无法得到正确结果
当前的累加逻辑
s = s + n -i不符合1到n的自然数求和规则,同时if (n - i) < 0的判断永远不会成立:range(1, n+1)的取值范围是1到n,n-i的最小值为0,不可能小于0。
修复后的可运行代码
n = int(input("Enter value of n.\n")) def sumof(n): s = 0 for i in range(1, n+1): s += i return s print(sumof(n))
如果需要保留break的写法(实际场景中此处不需要额外break),可以参考如下写法:
n = int(input("Enter value of n.\n")) def sumof(n): s = 0 for i in range(1, n+1): s += i if i >= n: break return s print(sumof(n))
内容的提问来源于stack exchange,提问作者user17086391
相关产品推荐
相关产品推荐

