Python while循环求平方和问题:为何返回输入数的立方?
问题分析与修复
嘿,我来帮你拆解下这个问题~
错误原因
你的代码之所以返回输入数的立方,核心问题出在循环里的计算逻辑:
y = (n**2)+y
你每次循环都在累加固定的n的平方,而不是当前循环变量x的平方。再看循环次数:x从0开始,直到x < n停止,一共会执行n次循环(比如n=3时,x取0、1、2,共3次)。那n次累加n²的结果就是n * n² = n³,这就解释了为什么返回的是立方啦!而且你的循环变量x其实根本没参与到平方计算里,完全是个“凑次数”的工具人😅
修复方法
要计算n范围内所有数的平方和,首先得明确你要的是0到n-1的平方和,还是1到n的平方和?我给你两种情况的修复方案:
情况1:计算0到n-1的平方和
只需要把累加的n**2改成x**2即可,这样每次循环都会把当前x的平方加到总和里:
def problem2(n): x = 0 y = 0 while x < n: y = x**2 + y # 这里改成x的平方 x += 1 return y
比如n=3时,计算的是0²+1²+2²=0+1+4=5,运行代码返回5,符合预期。
情况2:计算1到n的平方和
如果你的需求是从1开始到n的平方和,那需要调整x的初始值和循环条件:
def problem2(n): x = 1 y = 0 while x <= n: # 循环条件改成x小于等于n y = x**2 + y x += 1 return y
比如n=3时,计算1²+2²+3²=1+4+9=14,运行代码返回14,正确。
另外,其实你还可以用更简洁的写法(比如for循环或者数学公式),不过既然你在练习while循环,上面的修复就完全够用啦~
内容的提问来源于stack exchange,提问作者Robert Kessler
相关产品推荐
相关产品推荐

