Python中更新变量n后sum函数结果未变?求原因及解决方法
问题解析与解决方法
嘿,我来帮你理清这个逻辑,顺便给你靠谱的解决办法~
为什么S的结果没有跟着n更新?
你遇到的核心问题是Python中变量赋值是一次性计算结果并存储的:
当你执行S = sum(L[0:n])这行代码时,Python会立刻读取当时n的值(也就是1),计算切片L[0:1]的和(也就是1),然后把这个固定的数值1存在变量S里。
之后你在while循环里更新n的值,只是改变了n这个变量存储的数字,但S已经是一个独立的数值了——它不会自动重新执行sum(L[0:n])来更新自己。这就像你把一杯水倒进杯子里,之后再往水壶里加水,杯子里的水不会变多是一个道理~
让S变成15的几种解决方法
方法1:在循环结束后再计算总和
如果你的目标是等n变成5后,计算整个列表的和,只需要把sum的计算放到循环结束之后:
L = [1, 2, 3, 4, 5] n = 1 while n < 5: n += 1 # 现在n已经是5了,再计算切片的和 S = sum(L[0:n]) print(n) # 输出:5 print(S) # 输出:15
方法2:循环中逐步累加(模拟sum的过程)
如果你想在每次n更新时,同步把新元素加到S里,可以在循环内更新S:
L = [1, 2, 3, 4, 5] n = 1 S = sum(L[0:n]) # 初始值为1 while n < 5: n += 1 S += L[n-1] # n增加后,新的元素是L[n-1](因为切片是左闭右开规则) print(n) # 输出:5 print(S) # 输出:15
方法3:直接计算整个列表的和(最简洁)
其实如果你的需求只是得到列表所有元素的和,完全不需要用n来控制切片,直接用sum(L)就可以:
L = [1, 2, 3, 4, 5] S = sum(L) print(S) # 输出:15
内容的提问来源于stack exchange,提问作者Hooman Tamimi
相关产品推荐
相关产品推荐

