Python:从txt文件中正确排序和打印数据

时间:2015-03-03 23:55:39

标签: python sorting

我的任务是创建一个代码,这是学生的测验。它还使教师能够看到学生与班上其他人相比的表现。学生完成测验后,其用户名为'和' correct_answers'存储在文本文件中(我的代码中实际工作的部分)。我设法阻止我的代码每次同一个学生重新参加考试时都会创建一个新的用户名。当用户选择“如果状态== 1:'”时,上述所有内容都会发生。 (状态1适用于学生,状态2适用于教师)。

当选择状态2时,将询问教师他们想要查看的课程。选择一个后,应分类3个最新分数和用户名:

  1. 按字母顺序排列,每位学生的考试成绩最高
  2. 以最高分,从最高到最低
  3. 按平均分,从最高到最低
  4. 到目前为止,我已经为状态2提出了这个问题:

    elif status == 2:
    while True:
        try:
            users_class2 = int(input("Which class would you like to view? (1,2 or 3)"))
        except ValueError:
            print("Please enter a number!")
        else:
            if users_class2 not in {1,2,3}:
                print("Please enter a number in {1,2,3}!")
            else:
                break
    
    if users_class2 == 1:
        val=[]
        keys=[]
        i=0
        l=[]
        lines=open('class1.txt','r').readlines()
        for line in lines:
          try:
            val.append(int(line))
          except:
            keys.append(line)
    
        for i in range(0,len(val),3):
         h=val[i:i+3]
         h.sort()
         l.append(h[::-1])
        print ("Sort the test results alphabetically and show the students highest score.\n")
        for i,j in zip(keys,l):
            print ("{},{}".format(i,j))
    
        print ("Sort by the average score, highest to lowest.")
        avlist=[float(sum(i))/len(i) for i in l ]
        print ("{}".format(avlist))
        while(len(avlist)):
            for i,j in zip(keys,avlist):
                if j==max(avlist):
                  print ("{},{}".format(i,j))
                  avlist.remove(j)
    
        print ("'\nSort by the highest score, highest to lowest.\n")
        hlist=[max(i) for i in l ]
        hlist.sort()
        hlist=hlist[::-1]
        for k in hlist:
            for i,j in zip(keys,l):
                if max(j)==k:
                    print ("{},{}".format(i,j))
    

    上面的代码只显示了一个if语句,用于' users_class2'。对于' class2.txt'重复2次。和' class3.txt'。

    选择一个类后,我的代码应该输出如下内容:

      

    按字母顺序对测试结果进行排序,并向学生展示最高分。

    艾伦,8,7,8

    鲍勃,9,9,8

    查理,3,4,5

      

    按平均得分排序,从最高到最低。

    鲍勃,9,9,8

    艾伦,8,7,8

    查理,3,4,5

      

    按最高分数排序,从最高到最低。

    鲍勃,9,9,8

    艾伦,8,7,8

    查理,3,4,5-

    但我得到了:

      

    按字母顺序对测试结果进行排序,并显示学生的最高分数。

         

    按平均分数排序,从最高到最低。

    []'

      

    按最高分数排序,从最高到最低。

    我已经在这方面工作了很长一段时间,但没有运气。如果有人能帮我找到解决办法,我将不胜感激。如果你看到我可以使我的代码有效的任何领域,请说出来。感谢。

1 个答案:

答案 0 :(得分:-1)

  

如果users_class2不在{1,2,3}中:

应该是

  

如果users_class2不在[1,2,3]中:

尝试打印出val和键是什么,是否按预期打印出数据?


因此,从您的代码中可以看出,您尝试从文本文件中读取文件,然后将其添加到keysval,对吗?

您可以尝试添加这些语句以进行调试,以查看是否按预期填充了“val”:

print "val is"
print val
print "====="

您可以在此正上方添加for for i in range(0,len(val),3):