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

如何修改Python代码实现按字母等级统计学生人数的柱状图

修正学生成绩等级柱状图显示问题

问题概况

现有代码可实现学生数量、测试次数及分数的输入,计算学生平均分并划分字母等级,但生成的柱状图不符合需求:

  • 错误将字母等级置于Y轴、平均分置于X轴,无法直观展示各等级的学生人数分布
  • 未包含无学生获得的字母等级(如无学生得A时,图表中不会显示A的柱子)

修正后的完整代码

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

def input_test_scores():
    # 输入学生数量
    studentnumber = int(input('Enter number of students: '))
    # 输入每位学生的测试次数
    numberoftests = int(input('Enter number of tests per student: '))
    # 存储所有学生的分数列表
    score = []
        
    for i in range(studentnumber):
        # 存储单个学生的所有测试分数
        studentlist = []
        for j in range(numberoftests):
            # 输入单份测试分数
            print(f"Enter score for test {j+1} of student {i+1}: ")
            studentlist.append(int(input()))
        # 将单个学生的分数加入总列表
        score.append(studentlist)
                 
    return score


def summarize_test_scores(score):
    # 计算每位学生的平均分
    mean = [sum(data)/len(data) for data in score]
    
    # 划分字母等级
    grade = []
    for x in mean:
        if x >= 90:
            grade.append('A')
        elif x >= 80:
            grade.append('B')
        elif x >= 70:
            grade.append('C')
        elif x >= 60:
            grade.append('D')
        else:
             grade.append('F')
                     
    # 打印每位学生的平均分和等级
    print("MEAN  GRADE")
    for m, g in zip(mean, grade):
        print(f'{m:.2f}  {g}')
    
    # 统计所有字母等级(含无人获得的等级)的人数
    all_grades = ['A', 'B', 'C', 'D', 'F']
    grade_counts = [grade.count(g) for g in all_grades]
    
    # 生成柱状图
    title = f'Student Grade Distribution (Total Students: {len(grade)})'
    sns.set_style('whitegrid')
    axes = sns.barplot(x=all_grades, y=grade_counts, palette='bright')
    axes.set_title(title)
    axes.set_xlabel('Letter Grade')
    axes.set_ylabel('Number of Students')
    plt.show()


score = input_test_scores()
summarize_test_scores(score)

关键修改说明

  • 修复原代码中函数内的缩进错误,确保绘图逻辑属于summarize_test_scores函数
  • 新增all_grades列表定义所有可能的字母等级,通过grade.count()统计每个等级的学生人数,保证无人获得的等级也会显示(人数为0)
  • 调整sns.barplot的参数:X轴设为字母等级,Y轴设为对应人数,符合需求
  • 优化输入提示信息,明确是哪位学生的哪次测试
  • 添加图表标题和坐标轴标签,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36