设计一个对学生成绩进行分析的程序,实现一个班级的学生成绩进行排序、求平均分, 求最高分、最低分以及分数段的人数进行统计等功能。并实现输出分析结果。要求菜单具有录入学生成绩信息、显示学生成绩信息、查询学生成绩信息、
时间: 2024-03-31 08:35:15 浏览: 17
好的,为了实现这个程序,我们可以将上面的班级类的功能进一步封装,然后设计一个交互式的菜单,让用户可以选择不同的功能。以下是一个可能的实现:
```python
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
class Class:
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
def sort_by_score(self):
self.students.sort(key=lambda x: x.score, reverse=True)
def get_average_score(self):
total_score = sum([student.score for student in self.students])
return total_score / len(self.students)
def get_highest_score(self):
return max([student.score for student in self.students])
def get_lowest_score(self):
return min([student.score for student in self.students])
def get_score_distribution(self):
distribution = {
"0-59": 0,
"60-69": 0,
"70-79": 0,
"80-89": 0,
"90-100": 0
}
for student in self.students:
if student.score < 60:
distribution["0-59"] += 1
elif student.score < 70:
distribution["60-69"] += 1
elif student.score < 80:
distribution["70-79"] += 1
elif student.score < 90:
distribution["80-89"] += 1
else:
distribution["90-100"] += 1
return distribution
def print_menu():
print("-" * 30)
print("1. 录入学生成绩信息")
print("2. 显示学生成绩信息")
print("3. 查询学生成绩信息")
print("4. 退出程序")
print("-" * 30)
def input_student():
while True:
name = input("请输入学生姓名(输入q退出):")
if name == "q":
break
try:
score = int(input("请输入学生分数:"))
except ValueError:
print("分数必须是整数,请重新输入!")
continue
s = Student(name, score)
c.add_student(s)
def show_student():
if not c.students:
print("还没有录入学生成绩信息!")
return
c.sort_by_score()
print("学生排名如下:")
for i, student in enumerate(c.students):
print(f"{i+1}. {student.name}\t{student.score}")
print("学生成绩统计信息如下:")
print(f"平均分:{c.get_average_score():.2f}")
print(f"最高分:{c.get_highest_score()}")
print(f"最低分:{c.get_lowest_score()}")
distribution = c.get_score_distribution()
print("分数段人数统计如下:")
for k, v in distribution.items():
print(f"{k}: {v}")
def search_student():
if not c.students:
print("还没有录入学生成绩信息!")
return
name = input("请输入要查询的学生姓名:")
for student in c.students:
if student.name == name:
print(f"{name}的分数是:{student.score}")
break
else:
print(f"没有找到名为{name}的学生!")
if __name__ == "__main__":
c = Class()
while True:
print_menu()
choice = input("请输入菜单编号:")
if choice == "1":
input_student()
elif choice == "2":
show_student()
elif choice == "3":
search_student()
elif choice == "4":
print("谢谢使用!")
break
else:
print("无效的菜单编号,请重新输入!")
```
在这个程序中,我们首先定义了一个菜单,让用户可以选择录入学生成绩信息、显示学生成绩信息、查询学生成绩信息或退出程序。在录入学生成绩信息时,我们使用了一个循环,让用户可以连续输入多个学生的信息,输入"q"后退出循环。在显示学生成绩信息时,我们首先调用班级对象的sort_by_score方法,将学生按照分数从高到低排序,然后输出每个学生的排名、姓名和分数,以及一些统计信息,如平均分、最高分、最低分和分数段人数统计。在查询学生成绩信息时,我们让用户输入要查询的学生姓名,然后遍历学生列表,找到对应学生的分数并输出。
您可以根据需要对这个程序进行修改和扩展。