题目:
编写程序处理学生3门成绩课程成绩,实现以下功能:
- 键盘输入学生学号、姓名、课程名称、成绩
- 计算每个学生的平均分
- 计算每个课程的平均分
- 对成绩按平均分进行排序(降序)
- 将信息输出,并且进行格式化,如图
代码
all_student = [] # 存放所有学生
course_name_list = [] # 存放课程名字
course_sum_list = [] # 存放每科课程分数总和
# 定义课程
course_count = int(input("请输入课程门数:"))
for i in range(1, course_count + 1):
name = input('请输入第{}门课程名称:'.format(i))
course_name_list.append(name)
course_sum_list.append(0)
# 定义学生
stu_count = int(input("请输入学生的个数:"))
for i in range(1, stu_count + 1):
item = dict()
item['学号'] = int(input('请输入第{}位学生学号:'.format(i)))
# 姓名
item['姓名'] = input('请输入第{}位学生名字:'.format(i))
# 课程
sum, avg = 0, 0
for i in range(len(course_name_list)):
item[course_name_list[i]] = float(input('请输入{}分数:'.format(course_name_list[i]))) # 学生的该科成绩
sum += item[course_name_list[i]]
course_sum_list[i] += item[course_name_list[i]]
# 算平均分
item["平均分"] = round(sum / course_count, 1)
all_student.append(item)
# 输出标题
title_str = '{: <8}\t'.format('姓名') + '{: <8}\t'.format('学号')
for course_name in course_name_list:
title_str += '{: <8}\t'.format(course_name)
title_str += '{: <8}\t'.format('平均分')
print(title_str)
# 输出学生
all_student.sort(key=lambda x: x['平均分'], reverse=True)
for item in all_student:
stu_str = '{: <8}\t'.format(item['姓名']) + '{: <8}\t'.format(item['学号'])
for course_name in course_name_list:
stu_str += '{: <8}\t'.format(item[course_name])
stu_str += '{: <8}'.format(item['平均分'])
print(stu_str)
# 输出课程排序
avg_str = '{: <8}\t{: <8}\t'.format('课程平均分', '')
for course_sum in course_sum_list:
avg = round(course_sum / len(all_student), 1)
avg_str += '{: <8}\t'.format(avg)
print()
print(avg_str)
结果: