You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义计算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:45:01