请求帮助完善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
相关产品推荐
相关产品推荐

