4. 学生成绩管理
任务说明
实现一个学生成绩管理程序,核心是一个 Student 类(包含姓名和成绩),以及一个管理容器类,支持添加、删除、修改、查询学生信息,并能计算全班平均分和最高分。程序通过命令行交互方式运行,输入指令后立即输出对应结果。
核心实现
class Student:
"""学生类:包含姓名和成绩"""
def __init__(self, name, score):
self.name = name
self.score = score
def __repr__(self):
return f"{self.name}: {self.score}分"
class GradeManager:
"""成绩管理类:支持增删改查、平均分、最高分"""
def __init__(self):
self.students = [] # 存储Student对象列表
def add(self, name, score):
"""添加学生,若姓名已存在则拒绝"""
if self.find(name):
return f"添加失败:学生 {name} 已存在"
self.students.append(Student(name, score))
return f"已添加学生 {name},成绩 {score} 分"
def remove(self, name):
"""按姓名删除学生"""
stu = self.find(name)
if stu:
self.students.remove(stu)
return f"已删除学生 {name}"
return f"删除失败:未找到学生 {name}"
def update(self, name, new_score):
"""按姓名修改成绩"""
stu = self.find(name)
if stu:
stu.score = new_score
return f"已修改 {name} 的成绩为 {new_score} 分"
return f"修改失败:未找到学生 {name}"
def find(self, name):
"""按姓名查询,返回Student对象或None"""
for stu in self.students:
if stu.name == name:
return stu
return None
def query(self, name):
"""查询并返回格式化字符串"""
stu = self.find(name)
return f"{stu.name}: {stu.score}分" if stu else f"未找到学生 {name}"
def average(self):
"""计算全班平均分(无学生时返回0)"""
if not self.students:
return 0
total = sum(s.score for s in self.students)
return round(total / len(self.students), 1)
def max_score(self):
"""返回最高分学生信息,无学生时返回None"""
if not self.students:
return None
top = max(self.students, key=lambda s: s.score)
return f"{top.name}: {top.score}分"
def list_all(self):
"""列出所有学生"""
if not self.students:
return "当前无学生记录"
return "\n".join(str(s) for s in self.students)
def main():
mgr = GradeManager()
print("学生成绩管理(指令:add/remove/update/query/average/max/list/exit)")
while True:
cmd = input("> ").strip().split()
if not cmd:
continue
op = cmd[0].lower()
if op == "exit":
print("已退出")
break
elif op == "add" and len(cmd) == 3:
print(mgr.add(cmd[1], float(cmd[2])))
elif op == "remove" and len(cmd) == 2:
print(mgr.remove(cmd[1]))
elif op == "update" and len(cmd) == 3:
print(mgr.update(cmd[1], float(cmd[2])))
elif op == "query" and len(cmd) == 2:
print(mgr.query(cmd[1]))
elif op == "average":
print(f"全班平均分:{mgr.average()}")
elif op == "max":
result = mgr.max_score()
print(f"最高分:{result}" if result else "当前无学生记录")
elif op == "list":
print(mgr.list_all())
else:
print("无效指令,请检查格式")
if __name__ == "__main__":
main()
运行与验证
将上述代码保存为 grade_manager.py,在终端执行 python grade_manager.py 启动程序。按以下顺序输入指令验证功能:
> add 张三 85
> add 李四 92
> add 王五 78
> list
> average
> max
> update 李四 95
> query 李四
> remove 王五
> query 王五
> exit
预期输出对照(与代码逻辑严格一致):
add 张三 85→ 已添加学生 张三,成绩 85.0 分add 李四 92→ 已添加学生 李四,成绩 92.0 分add 王五 78→ 已添加学生 王五,成绩 78.0 分list→ 三行学生信息average→ 全班平均分:85.0max→ 最高分:李四: 92.0分update 李四 95→ 已修改 李四 的成绩为 95.0 分query 李四→ 李四: 95.0分remove 王五→ 已删除学生 王五query 王五→ 未找到学生 王五
判定标准:程序能完整执行上述指令序列,输出与预期一致;重复添加同名学生会提示失败;对不存在的学生执行删除/修改/查询会返回对应错误提示;average 和 max 在无学生时分别返回 0 和“当前无学生记录”,即判定通过。