使用for循环编写的列表均值计算函数结果异常,求助排查错误
首先,你贴出来的代码本身是完全正确的——我把这段代码复制到Python3环境运行,输出确实是3.0,Python2环境则输出3,和预期一致。那你得到0.2的结果,大概率是实际运行的代码和你贴的版本有差异,以下是几种最可能的原因和对应的解决办法:
全局变量干扰了局部变量
如果在定义这个函数之前,你已经在全局作用域里定义过sumOfNumbers变量,并且它的值不是0(比如之前运行的代码把它设成了-14),同时函数内部又没有重新初始化sumOfNumbers = 0,那么函数会直接使用全局的sumOfNumbers值。举个例子:sumOfNumbers = -14 # 之前的代码留下的全局变量 myOddList = [1, 2, 3, 4, 5] def meanCalculator(myOddList): # 这里漏掉了sumOfNumbers = 0的初始化 for i in myOddList: sumOfNumbers += i mean = sumOfNumbers / len(myOddList) return mean这种情况下,
sumOfNumbers最终会是-14 + 1+2+3+4+5 = 1,除以5就得到0.2。解决办法很简单:确保函数内部第一行就初始化sumOfNumbers = 0,把它变成函数的局部变量,不受全局变量影响。列表或计算逻辑被误修改
比如你实际使用的列表不是[1,2,3,4,5],而是[1],同时又错误地把分母硬编码成了5(而不是len(myOddList)),那1/5正好是0.2。或者你不小心把sumOfNumbers += i写成了sumOfNumbers = 1(固定赋值为1),也会得到这个结果。检查你的代码,确保:- 传入函数的列表确实是
[1,2,3,4,5] - 分母是
len(myOddList)而不是固定数字 - 循环内的累加语句是
sumOfNumbers += i而不是其他错误写法
- 传入函数的列表确实是
缩进错误导致累加逻辑失效
如果sumOfNumbers += i的缩进不正确,没有被包含在for循环的代码块里,那累加只会执行一次(或者完全不执行)。不过这种情况通常会得到0或者最后一个元素的均值,不太会直接得到0.2,但也建议检查代码的缩进是否符合Python的规范(用4个空格缩进)。
最后,再确认一下你的代码和你贴出来的版本完全一致,尤其是变量初始化、循环缩进和列表内容这几个关键点,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者user13938341

