Python average函数报错:mean/median未定义,求代码修复方案
修复Python代码中mean/median未定义的错误
问题根源
你的代码存在几个关键错误,导致了mean和median未定义的报错:
- 直接把
mean当作参数传入函数,但该变量从未定义,Python无法识别。 - 函数内部误用变量
a,实际参数是vals,属于笔误。 - 用比较运算符
==做赋值操作,正确赋值应该用单等号=。 - 中位数计算逻辑错误,仅计算了索引,未取对应值,也没对数据排序。
- 无论传入什么方法,两个打印语句都会执行,逻辑混乱。
修复后的代码(字符串传参版)
def average(vals, method): val_list = list(vals) if method == "mean": mean_val = sum(val_list) / len(val_list) print('The mean is', str(mean_val)) elif method == "median": val_list.sort() n = len(val_list) # 根据长度奇偶计算中位数 if n % 2 == 1: median_val = val_list[n // 2] else: median_val = (val_list[n//2 - 1] + val_list[n//2]) / 2 print('The median is', str(median_val)) else: print("不支持的方法,请传入'mean'或'median'") # 调用时传入对应的字符串 average((-1,0,1,1,1,2,3), "mean") average((-1,0,1,1,1,2,3), "median")
修复说明
- 用字符串标识方法:将
"mean"和"median"作为参数传入,避免未定义变量的问题。 - 修正变量名:把错误的
a替换为参数vals,并转成列表方便排序操作。 - 修正赋值符号:将
==改为=,完成正确的变量赋值。 - 修复中位数逻辑:先对列表排序,再根据长度奇偶计算正确中位数(奇数取中间值,偶数取中间两数的平均值)。
- 优化执行逻辑:用
elif和else控制流程,确保只执行对应方法的代码,避免无效打印。
更规范的常量传参版
如果想避免字符串拼写错误,可以定义常量:
MEAN = "mean" MEDIAN = "median" def average(vals, method): val_list = list(vals) if method == MEAN: mean_val = sum(val_list) / len(val_list) print('The mean is', str(mean_val)) elif method == MEDIAN: val_list.sort() n = len(val_list) median_val = val_list[n//2] if n % 2 == 1 else (val_list[n//2 -1] + val_list[n//2])/2 print('The median is', str(median_val)) else: print("不支持的方法,请传入MEAN或MEDIAN常量") average((-1,0,1,1,1,2,3), MEAN)
内容的提问来源于stack exchange,提问作者Erin O'Halloran
相关产品推荐
相关产品推荐

