首页 > Python资料 博客日记
基于Python的学生成绩管理系统(附源码及解析)
2025-01-06 01:00:05Python资料围观9次
前言
上一篇文章我们分享了一个基于Python的文件处理的程序代码,这篇文章我们来分享一个基于Python的学生成绩管理系统,这个系统的难度不大,也没有用到别的第三方库,非常适合小白学习完Python基础后作为练手题目去巩固一下,毕竟只有会用了,会码了才是真的学会了。
正文
1、系统功能
先来看一下这个系统可以执行的功能
2、整体代码
话不多说,先附上整体的源码
students = []
print("欢迎来到由本人来自霍格沃茨设计的学生成绩管理系统")
def create_username():
username = input("请输入用户名:")
print(f"用户名 {username} 创建成功。")
def student_information():
name = input("请输入学生姓名:")
scores = {}
subjects = ['语文', '英语', '数学', '理综']
for subject in subjects:
while True:
try:
if subject in ['语文', '英语', '数学']:
max_score = 150
elif subject == '理综':
max_score = 300
score = int(input(f"请输入{subject}成绩:"))
if 0 <= score <= max_score:
scores[subject] = score
break
else:
print(f"请输入一个介于0到{max_score}之间的有效成绩。")
except ValueError:
print("成绩输入无效,请输入整数。")
student = {'name': name, 'scores': scores}
students.append(student)
def make_list():
if not students:
print("没有学生信息可显示。")
return
total()
sorted_students = sorted(students, key=lambda x: x['total_score'], reverse=True)
print("姓名\t语文\t英语\t数学\t理综\t总分\t排名")
for rank, student in enumerate(sorted_students, start=1):
total_score = student['total_score']
print(f"{student['name']}\t{student['scores']['语文']}\t{student['scores']['英语']}\t{student['scores']['数学']}\t{student['scores']['理综']}\t{total_score}\t{rank}")
def total():
if not students:
print("没有学生信息可计算。")
return
for student in students:
total_score = sum(student['scores'].values())
student['total_score'] = total_score
print(f"{student['name']} 总分: {student['total_score']}")
def average():
if not students:
print("没有学生信息可计算。")
return
subject_totals = {
'语文': 0,
'英语': 0,
'数学': 0,
'理综': 0
}
total_score_sum = 0
for student in students:
total_score = sum(student['scores'].values())
total_score_sum += total_score
for subject in subject_totals:
subject_totals[subject] += student['scores'][subject]
num_students = len(students)
print("各科平均分:")
for subject, total in subject_totals.items():
average = total / num_students
print(f"{subject} 平均分: {average:.2f}")
overall_average = total_score_sum / num_students
print(f"总分平均分: {overall_average:.2f}")
def ranking():
total()
sorted_student = sorted(students, key=lambda x: x['total_score'], reverse=True)
rank = 1
for student in sorted_student:
student['rank'] = rank
rank += 1
print(f"{student['name']}\t排名: {student['rank']}")
def get_highest_scores():
if not students:
print("没有学生信息可查询。")
return
highest_scores = {}
subjects = ['语文', '英语', '数学', '理综']
for subject in subjects:
highest_scores[subject] = students[0]['scores'][subject]
for student in students:
for subject in subjects:
if student['scores'][subject] > highest_scores[subject]:
highest_scores[subject] = student['scores'][subject]
print("各科的最高分分别为:")
for subject in subjects:
student_with_highest = max(students, key=lambda x: x['scores'][subject])
print(f"{subject}: {student_with_highest['name']} {highest_scores[subject]}")
def close():
print("系统要关闭咯,期待我们下次相遇")
exit()
while True:
print("1. 创建用户名")
print("2. 录入学生信息")
print("3. 显示成绩表")
print("4. 计算总分")
print("5. 给出排名")
print("6. 输出各科最高分")
print("7. 输出各科平均分")
print("8. 退出系统")
choice = input("请选择你想执行的操作序号:")
if choice == "1":
create_username()
elif choice == "2":
student_information()
elif choice == "3":
make_list()
elif choice == "4":
total()
elif choice == "5":
ranking()
elif choice == "6":
get_highest_scores()
elif choice == "7":
average()
elif choice == "8":
close()
else:
print("你输入的是什么玩意,本系统听不明白,重新输入")
可以看到,这个系统中主要是定义了这些个函数,通过判断输入的数字来调用不同的函数来实现相应的功能
3、主要函数功能介绍
3.1 create_username函数
通过
input
函数获取用户输入的用户名,并告知用户用户名创建成功,主要用于系统个性化用户名的设定,但目前此用户名未在后续功能中有实质关联使用,更多是起到提示作用。
def create_username():
username = input("请输入用户名:")
print(f"用户名 {username} 创建成功。")
3.2 student_information函数
先获取学生的姓名,然后针对语文、英语、数学、理综这几门学科,循环让用户输入成绩。在输入成绩时,会根据学科不同设定不同的成绩范围限制(语文、英语、数学满分150,理综满分300),并对输入值进行有效性验证(要求输入整数且在对应学科的合理分数区间内),最后将学生姓名和各科成绩以字典形式组合成一个学生信息字典,添加到
students
列表中,用于后续的各种成绩相关统计和展示。
def student_information():
name = input("请输入学生姓名:")
scores = {}
subjects = ['语文', '英语', '数学', '理综']
for subject in subjects:
while True:
try:
if subject in ['语文', '英语', '数学']:
max_score = 150
elif subject == '理综':
max_score = 300
score = int(input(f"请输入{subject}成绩:"))
if 0 <= score <= max_score:
scores[subject] = score
break
else:
print(f"请输入一个介于0到{max_score}之间的有效成绩。")
except ValueError:
print("成绩输入无效,请输入整数。")
student = {'name': name, 'scores': scores}
students.append(student)
3.3 make_list函数
首先判断
students
列表是否为空,如果为空则提示没有学生信息可显示并返回。若不为空,先调用total
函数计算每个学生的总分,然后根据学生的总分对students
列表中的学生信息字典进行降序排序,接着按照固定格式(姓名、各科成绩、总分、排名)打印出成绩表信息,方便直观查看学生成绩情况及排名情况。
def make_list():
if not students:
print("没有学生信息可显示。")
return
total()
sorted_students = sorted(students, key=lambda x: x['total_score'], reverse=True)
print("姓名\t语文\t英语\t数学\t理综\t总分\t排名")
for rank, student in enumerate(sorted_students, start=1):
total_score = student['total_score']
print(f"{student['name']}\t{student['scores']['语文']}\t{student['scores']['英语']}\t{student['scores']['数学']}\t{student['scores']['理综']}\t{total_score}\t{rank}")
3.4 total函数
同样先判断
students
列表是否为空,为空则返回。不为空时,初始化一个用于记录各科成绩总和的字典,以及用于统计所有学生总分总和的变量。接着遍历学生信息列表,累加每个学生的总分到总和变量,同时针对每个学科累加对应成绩到学科总和字典中。最后根据学生数量计算各科平均分以及总分平均分,并按照格式打印输出,能直观呈现各科以及整体的平均成绩水平。
def total():
if not students:
print("没有学生信息可计算。")
return
for student in students:
total_score = sum(student['scores'].values())
student['total_score'] = total_score
print(f"{student['name']} 总分: {student['total_score']}")
3.5 average函数
同样先判断
students
列表是否为空,为空则返回。不为空时,初始化一个用于记录各科成绩总和的字典,以及用于统计所有学生总分总和的变量。接着遍历学生信息列表,累加每个学生的总分到总和变量,同时针对每个学科累加对应成绩到学科总和字典中。最后根据学生数量计算各科平均分以及总分平均分,并按照格式打印输出,能直观呈现各科以及整体的平均成绩水平。
def average():
if not students:
print("没有学生信息可计算。")
return
subject_totals = {
'语文': 0,
'英语': 0,
'数学': 0,
'理综': 0
}
total_score_sum = 0
for student in students:
total_score = sum(student['scores'].values())
total_score_sum += total_score
for subject in subject_totals:
subject_totals[subject] += student['scores'][subject]
num_students = len(students)
print("各科平均分:")
for subject, total in subject_totals.items():
average = total / num_students
print(f"{subject} 平均分: {average:.2f}")
overall_average = total_score_sum / num_students
print(f"总分平均分: {overall_average:.2f}")
3.6 ranking函数
先调用
total
函数计算总分,再根据学生的总分对学生信息列表进行降序排序,然后依次给每个学生添加排名信息,并打印出学生姓名和对应的排名,清晰展示学生成绩排名情况。
def ranking():
total()
sorted_student = sorted(students, key=lambda x: x['total_score'], reverse=True)
rank = 1
for student in sorted_student:
student['rank'] = rank
rank += 1
print(f"{student['name']}\t排名: {student['rank']}")
3.7 get_highest_scores函数
首先判断
students
列表是否为空,为空则返回。不为空时,初始化一个记录各科最高分的字典,先默认将第一个学生的各科成绩作为初始最高分。接着遍历所有学生信息,比较各科成绩,如果发现有更高的成绩则更新最高分字典中的对应学科成绩。最后打印出各科的最高分以及取得该最高分的学生姓名,方便查看各学科的最优成绩情况。
def get_highest_scores():
if not students:
print("没有学生信息可查询。")
return
highest_scores = {}
subjects = ['语文', '英语', '数学', '理综']
for subject in subjects:
highest_scores[subject] = students[0]['scores'][subject]
for student in students:
for subject in subjects:
if student['scores'][subject] > highest_scores[subject]:
highest_scores[subject] = student['scores'][subject]
print("各科的最高分分别为:")
for subject in subjects:
student_with_highest = max(students, key=lambda x: x['scores'][subject])
print(f"{subject}: {student_with_highest['name']} {highest_scores[subject]}")
3.8 close函数
简单打印系统关闭提示信息,并通过
exit
函数退出整个程序,实现正常关闭系统的功能。
def close():
print("系统要关闭咯,期待我们下次相遇")
exit()
4、程序主循环逻辑
通过一个无限循环
while True
来持续展示操作菜单,让用户选择想要执行的操作序号,根据不同的输入序号调用对应的函数来完成相应功能。如果用户输入的序号不在规定的 1 - 8 范围内,则提示输入无效让用户重新输入,以此保证系统能按照用户期望的功能进行交互操作。
结语
这篇基于Python的学生成绩管理系统就分享到这里了,如果有需要的可以借鉴,希望我的分享可以对你起到帮助。还是前言那里说的,这个系统真的很适合新手学完基础之后练手使用,相信经过实战之后,你会对Python的理解更上一层楼。
阅读过程中,如果有发现文章哪里写的有问题,或者代码运行报错,可以发在评论区,我们一起讨论,我看到之后一定会尽快回复。
创作不易,能否给个三连支持一下~
标签:
相关文章
最新发布
- 小波变换算法详解(附Python和C++代码)
- WxPython跨平台开发框架之使用PyInstaller 进行打包处理
- 【Python】正则表达式
- manim边做边学--动画组合
- Outlook不支持账号密码改OAuth2.0认证方式获取outlook邮箱收件箱以及附件(python)
- Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
- 华为OD机试E卷 --最左侧冗余覆盖子串--24年OD统一考试(Java & JS & Python & C & C++)
- python graphviz 中文乱码
- 华为OD机试E卷 --贪心歌手--24年OD统一考试(Java & JS & Python & C & C++)
- 【Python】装饰器、正则表达式
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程