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

请求帮助完善Python学生成绩统计代码:实现平均分计算

问题分析与解决方案

你的代码存在两个核心问题导致平均分功能失效:

  • 调用了不存在的mid()函数,且混淆了**中位数(median)和平均分(均值/mean)**的概念——你导入了statistics.median但未正确使用,而需求要的是平均分。
  • 未处理空输入场景(比如直接输入done),此时调用max()/min()/均值计算会直接报错。

修正方案1:手动计算平均分(无需额外模块)

def ScoreList():
    scores = {'name': [], 'score': []}
    while True:
        name = input("Enter a name or enter 'done' when finished ")
        if name == 'done': break
        scores['name'].append(name)  # 用append比+=[]更规范
        try:
            score = int(input('Enter score '))
            scores['score'].append(score)
        except ValueError:
            print("请输入有效的整数成绩")
            continue  # 输入无效时重新请求输入

    return scores

if __name__ == '__main__':
    scores = ScoreList()
    print(scores)
    
    # 先判断是否有成绩数据,避免空列表报错
    if not scores['score']:
        print("没有输入任何成绩数据")
    else:
        maxScore = max(scores['score'])
        print("max score is:", maxScore)
        minScore = min(scores['score'])
        print("min score is:", minScore)
        # 手动计算平均分:总和除以数量,格式化保留两位小数
        avgScore = sum(scores['score']) / len(scores['score'])
        print("average score is: {:.2f}".format(avgScore))

修正方案2:使用statistics.mean模块计算

from statistics import mean

def ScoreList():
    scores = {'name': [], 'score': []}
    while True:
        name = input("Enter a name or enter 'done' when finished ")
        if name == 'done': break
        scores['name'].append(name)
        try:
            score = int(input('Enter score '))
            scores['score'].append(score)
        except ValueError:
            print("请输入有效的整数成绩")
            continue

    return scores

if __name__ == '__main__':
    scores = ScoreList()
    print(scores)
    
    if not scores['score']:
        print("没有输入任何成绩数据")
    else:
        maxScore = max(scores['score'])
        print("max score is:", maxScore)
        minScore = min(scores['score'])
        print("min score is:", minScore)
        avgScore = mean(scores['score'])
        print("average score is: {:.2f}".format(avgScore))

额外优化说明

  • 加入try-except捕获无效输入,避免用户输入非整数时程序崩溃。
  • 增加空数据判断,处理用户直接输入done的边界场景。
  • 用append()替代+= [name],是Python中列表添加元素的标准写法。

内容的提问来源于stack exchange,提问作者yojozaok21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:21:00