成绩检索统计程序开发
由于你的成绩优秀,你被选为课代表。你看到老师每天忙于统计各科成绩,在学习了半个学期的Python后你决定开发一个小程序帮助老师进行日常成绩的检索和查询工作。经过和老师的沟通,你了解到:
(1) 老师希望能通过学生学号和课程名称查询学生的成绩信息。比如,输入一个学号,查询这名学生各科成绩信息;输入课程名称,则查询这门课程所有学生的成绩信息;输入一个学号和一个课程名称,则查询该学生这门课程的成绩信息。
(2) 老师希望能统计一门课程的成绩分布情况。比如,输入一门课程名称,将该课程‘优、良、中、及格、不及格’的人数统计出来(90-100为优,80-89为良,70-79为中,60-69为及格,0-59为不及格)。
需实现步骤如图:
需要查找的数据列表(数据过多,省略部分)
SCORE_LIST = (['大数据开发语言', '2019060017', '牛文胜', '66'],
['大数据开发语言', '2019057013', '霍晓凯', '45'],
['大数据开发语言', '2019059008', '刁宁凤', '79'],
['大数据开发语言', '2019010002', '粱金梁', '67'],
['大数据开发语言', '2019010011', '堵霄', '68'],
['结构化数据存储与处理', '2019012025', '牛伯', '86'],
['结构化数据存储与处理', '2019027015', '杨琛厚', '68'],
['大数据开发语言', '2019043007', '巩欢', '76'],
['结构化数据存储与处理', '2019043005', '刘好学', '79'],
['结构化数据存储与处理', '2019060020', '童莲娅', '73'],
['大数据开发语言', '2019042001', '路娟云', '77'],
['大数据开发语言', '2019074007', '秦松顺', '67'],
['结构化数据存储与处理', '2019026014', '乔浩媛', '93'],
['大数据开发语言', '2019027015', '杨琛厚', '78'],
['结构化数据存储与处理', '2019025018', '易祥礼', '75'],
['结构化数据存储与处理', '2019058019', '季国子', '73'],
['大数据开发语言', '2019009007', '项鹏子', '75'],
['结构化数据存储与处理', '2019028013', '邵杰笑', '66'],
['结构化数据存储与处理', '2019058016', '芮筠羽', '99'],
['结构化数据存储与处理', '2019009015', '申达', '80'],
['大数据开发语言', '2019074024', '房舒', '88'])
进入成绩管理系统
choice = None
while choice != '0':
print('''
############################
成绩录入系统
0 - 退出程序
1 - 成绩检索
2 - 成绩统计
############################
''')
0 - 退出程序
if choice == '0':
print('退出系统')
exit(0)
1 - 成绩检索
elif choice == '1':
# 通过学号和课程查找一系列信息
# 输入信息 学号 课程名称
stu_Num = input('请输入学生学号:')
stu_Course = input('请输入课程名称:')
found = False
for line in SCORE_LIST:
# 课程名和学号均合法情况
#学号等于十位数 课程大于一 使用in可以实现模糊查找
if len(stu_Num) == 10 and len(stu_Course) > 0 and stu_Num == line[1] and stu_Course in line[0]:
print(line)
# 学号合法,课名不合法 -> 使用学号检索
elif len(stu_Num) == 10 and len(stu_Course) == 0 and stu_Num == line[1]:
print(line)
# 学号不合法,课名合法 -> 使用课名(子串)检索
elif len(stu_Num) != 10 and len(stu_Course) > 0 and stu_Course in line[0]:
print(line)
else:
continue
2 - 成绩统计
elif choice == '2':
#另每个分数段的人数为0
interval_1 = 0
interval_2 = 0
interval_3 = 0
interval_4 = 0
interval_5 = 0
stu_Course = input("请输入你要统计的课程名称:")
for line in SCORE_LIST:
#当课程在列表中时
if line[0] == stu_Course:
#成绩大于等于0,小于60
if int(line[3]) >= 0 and int(line[3]) < 60:
#成绩大于等于60,小于70
interval_1 += 1
#成绩大于等于70,小于80
elif int(line[3]) >= 60 and int(line[3]) < 70:
interval_2 += 1
#成绩大于等于80,小于90
elif int(line[3]) >= 70 and int(line[3]) < 80:
interval_3 += 1
#成绩大于等于90,小于等于100
elif int(line[3]) >= 80 and int(line[3]) < 90:
interval_4 += 1
elif int(line[3]) >= 90 and int(line[3]) <= 100:
interval_5 += 1
else:
continue
#输出各分数段人数
print("""
统计课程:%s
优:%s人
良:%s人
中:%s人
及格:%s人
不及格:%s人
""" % (stu_Course, interval_5, interval_4, interval_3, interval_2, interval_1))
如查找到不合法的菜单项
else:
print("不合法!")
exit(0)
也可以把每个菜单封装成单独的函数
主程序为:
if __name__ == '__main__':
func_choice = input("请选择操作类型(1-成绩检索 2-成绩统计): ")
if func_Search == '1':
#菜单1封装成一个函数
score_Sta()
elif func_choice == '2':
#菜单2封装成一个函数
score_stat()
else:
exit()
接下来我们一起来看一下运行的结果:
学号合法,课程名不合法输出:
学号不合法,课程名称合法输出:
模糊查找(子串查找)
学号合法,课程名合法输出:
菜单2,成绩统计: