python编程求解答

运用字典和列表的知识,对一个学生成绩表进行简单操作。

要求:

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)