运用字典和列表的知识,对一个学生成绩表进行简单操作。
要求:
1. 课程数和课程名任意,从键盘接收,不少于三门课程
2. 学生数和学生成绩从键盘接收,不少于5个学生。
计算:
(1) 增加一个列表,用来记录所有字典信息,键对(课程名’,‘平均分’,‘最高分’,‘最低分’}
(2) 给每个学生增加一个['总分‘]键值对,并求总分
(3) 按照总分对所有学生记录进行排序,并输出。要求模拟sort()函数,自己编写排序模块。
用了sort() ;自写模块
kch = input("请输入课程名称,用空格隔开:").split()
total = []
while True:
fen = {}
for i in kch:
cj = input(f"请输入{i}成绩:")
fen[i] = int(cj) if cj.isdecimal() else 0
fen["总分"] = sum(fen.values())
total.append(fen)
flag = input("继续输入y/n?:")
if flag == 'n':
break
tt=[]
for i in kch:
tem = {}
tem["总分"] = 0
max_fen = 0
min_fen = 100
for k in total:
tem["课程名"] = i
tem["总分"] += k[i]
max_fen = k[i] if k[i]>=max_fen else max_fen
min_fen = k[i] if k[i]<=min_fen else min_fen
tem["平均分"] = tem["总分"]/len(total)
tem["最低分"] = min_fen
tem["最高分"] = max_fen
tt.append(tem)
print(tt)
l1 = input("课程名,以空格隔开:").split() # 获取输入的课程以及学生分数,对应的学生每门科目情况
l2 = []
while True:
dic = {}
name = input("输入学生名称(输入q结束):")
suml = 0
if name == "q":
break
else:
dic["姓名"] = name
for i in range(len(l1)):
score = eval(input("请输入" +l1[i]+ "成绩:"))
dic[l1[i]] = score
suml += score
dic["总分"] = suml
l2.append(dic)
dic1 = {} # 获取每门课程的最高分、最低分、平均分
for i in l1:
l3 = []
dictname = {}
for v in range(len(l2)):
l3.append(l2[v][i])
dictname["total"] = sum(l3)
dictname["min"] = min(l3)
dictname["max"] = max(l3)
dictname["avg"] = round(sum(l3)/len(l3))
dic1[i] = dictname
print(dic1)
for j in range(0, len(l2) - 1): # 排序,学生总分以小到大
for i in range(0, len(l2) - 1 - j):
if l2[i]["总分"] > l2[i + 1]["总分"]:
a = l2[i]
l2[i] = l2[i + 1]
l2[i + 1] = a
print(l2)