

1.怎样算出班级平均gpa并存入一个变量
2.怎样对列表排序并找出第一名和最后一名,并将第一名和最后一名的学号姓名学分绩存储在元组中



Python代码
#!/sur/bin/nve python
# coding: utf-8
class_score = [
{'学号': '20190001','姓名': '刘一', '20春成绩':((6, 78), (3, 90), (3, 75), (2, 76), (2, 83), (4, 78), (1, 82), (2, 59), (1, 99))},
{'学号': '20190002', '姓名': '陈二', '20春成绩': ((6,53), (3, 63), (3, 75), (2, 47), (2, 44), (4, 41), (1, 73), (2, 47), (1, 71))},
{'学号': '20190003', ' 姓名': '张三', '20春成绩': ((6, 92), (3, 90), (3, 74), (2, 60), (2, 91), (4,85), (1,91), (2, 70), (1, 76))},
{'学号': '20190004', '姓名': '李四', '20春成绩': ((6, 96), (3, 83), (3, 72), (2, 69), (2,91), (4, 84), (1, 90), (2, 84), (1, 86))},
{'学号': '20190005', '姓名': '王五', '20春成绩': ((6, 87), (3, 68), (3, 62), (2, 56), (2, 69), (4, 72), (1, 84), (2, 77), (1, 41))},
{'学号': '20190006', '姓名': '赵六', '20春成绩':((6, 75), (3,91), (3,75), (2,84), (2, 89), (4,67), (1,89), (2, 65), (1,77))},
{'学导': '20190007', '姓名': '孙七', '20春成绩':((6, 57), (3, 61), (3,61), (2,57), (2, 82), (4, 46), (1, 85), (2, 50), (1, 77))},
{'学号': '20190008', '姓名': '周八', '20春成绩': ((6, 72), (3, 85), (3, 70), (2, 61), (2, 91), (4, 75), (1, 82), (2, 76), (1, 83))},
{'学号': '20190009', '姓名': '吴九', '20春成绩':((6, 76), (3, 81), (3, 54), (2, 38), (2,91), (4, 72), (1,87), (2, 83), (1, 63))},
{'学号': '20190010', '姓名': '郑十', '20春成绩': ((6, 74), (3, 73), (3, 73), (2, 79), (2, 82), (4, 70), (1, 85), (2, 86), (1, 71))}
]
#根据公式计算每个学生的GPA,为每个学生字典添加GPA键值 对;
for student in class_score:
scores = student['20春成绩']
GPA = xf = 0
for item in scores:
xf += item[0]
ascore = 0
if item[1] >= 60:
ascore = item[1]/10-5
GPA += ascore*item[0]
gpa = GPA/xf
student['GPA'] = gpa
#print(class_score) #调试用语句。
#计算班级平均GPA学分绩,将学分绩存储在-一个变量中;
'''Classgpa=0
for i in class_score:
Classgpa += i['GPA']
Classgpa = Classgpa/10'''
Classgpa = sum([i['GPA'] for i in class_score])/10 # 可以用复合语句改写前面的for循环。
#对成绩列表进行排序,找出第一名和最后一名,将学号、姓名、学分绩存储在元组中;
class_score.sort(key=lambda X: X['GPA'], reverse=True)
first, tail = class_score[0], class_score[-1]
first, tail = (first['学号'], first['姓名'], f"{first['GPA']:.2f}"), (tail['学号'], tail['姓名'], f"{tail['GPA']:.2f}") # 第一名和最末一名元组。格式化2位小数保存学分绩,方便后面打印输出。
#输出班级平均学分绩,输出第一名和最后一名的学号、姓名、学分绩GPA
print(f"\n班级平均学分绩:{Classgpa:.2f}\n\n第一名:{','.join(first)}\n最末一名:{','.join(tail)}\n")