Python前n个自然数平方和代码执行异常:手动输入与复制结果不同
问题原因分析
首先看你提供的代码,核心问题出在return语句的缩进上:
- 如果
return sm和sm += i ** 2在同一缩进级别(也就是for循环内部),函数会在第一次循环时就执行return:i=0时,sm变成0+0²=0,直接返回这个值,所以结果是0。 - 如果
return sm缩进在for循环外面(和for语句同一级别),函数会完成整个for循环(遍历0到4的所有数),计算0²+1²+2²+3²+4²=30,再返回结果,这才是正确的逻辑。
你遇到的差异,本质是手动输入和复制粘贴的代码缩进不一致:
- 手动输入时,你误把
return sm缩进进了for循环内部,导致逻辑错误,输出0。 - 从网站复制的代码,实际
return sm是在for循环外面的,所以能得到正确结果30。
修正后的正确代码
def sum(n): sm = 0 for i in range(n + 1): sm += i ** 2 return sm # 这里缩进在for循环外面 n = 4 print(sum(n)) # 输出30
Python是靠缩进划分代码块的语言,缩进错误直接会改变代码的执行逻辑,写代码时一定要注意缩进的层级。
内容的提问来源于stack exchange,提问作者Keerthana K
相关产品推荐
相关产品推荐

