关于#Python#的问题,如何解决?

编程处理n个学生m门课程的成绩。课程名称,
学生的学号、姓名、各课程成绩及n和m的值均从键盘接收。计算每个学生的平均分,并按平均分降序输出成绩表(二维表形式)。
要求:
1)分别用3个自定义函数实现输入、计算平均分
及排序、输出三大功能。在主程序中调用这些函数完成题目要求。
2)键盘输入的数据保存到“原始数据.txt"”文件,计算平均分及排序的函数从文件读取数据,输出结果保存到"输出结果.txt"文件。

  1. 这个程序有啥错误啊
    def dateinput():
    n = int(input("请输入班级人数:"))
    m = int(input("请输入课程门数:"))
    lititle = ["xh", "xm"]
    with open("原始数据.txt","w") as f:
     f.write("xh xm")
     for k in range(m):
         mc = input("请输入第" + str(k + 1) + "门课程名称:")
         lititle.append(mc)
         f.write(mc+"")
     f.write("\n")
     for j in range(n):
         xh= input("请输入学号:")
         f.write(xh+"")
         xm= input("请输入姓名:")
         f.write(xm+"")
         for i in range(m):
             cj=input("请输入       " + xm + "    的    " + lititle[i + 2] + "  成绩:")
             f.write(cj+"")
         f.write("\n")
    
    return
    def datapro(allstul):
    with open("原始数据.txt","r") as f:
     list1=f.readlines()
    
    str1=list1[0].rstrip("\n")
    list2=str1.split()
    for i in range(1,len(list1)):
     str2=list1[i].rstrip("\n")
     list3=str2.split()
     astu=dict(zip(list2,list3))
     allstul.append(astu)
    
    for p in allstul:
     s = 0
     for key,value in p.items():
         if key not in ["xh","xm"]:
             s=s+int(value)
     aver=round(s/len(p)-2,1)
     p["aver"]=aver
    
    allstul.sort(key=lambda x: x["aver"], reverse=True)
    return
    def dataoutput(allstul):
    for key, value in allstul[0].items():
     print("{:<8}".format(key), end='')
    
    print('')
    for q in allstul:
     for key, value in q.items():
           print("{:<8}".format(value), end='')
     print('')
    
    f=input("请输入文件名:")
    attul=[]
    dateinput()
    datapro(allstul)
    dataoutput(attul)