You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

修复说明

  1. 用字符串标识方法:将"mean"和"median"作为参数传入,避免未定义变量的问题。
  2. 修正变量名:把错误的a替换为参数vals,并转成列表方便排序操作。
  3. 修正赋值符号:将==改为=,完成正确的变量赋值。
  4. 修复中位数逻辑:先对列表排序,再根据长度奇偶计算正确中位数(奇数取中间值,偶数取中间两数的平均值)。
  5. 优化执行逻辑:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:50:32