2013-09-30 81 views
0
grades_list=open('student_grades.txt','r') 
for x in grades_list.readlines(): 
ft=1 
hf=0 
hm1=0 
hm2=0 
hm3=0 
hm4=0 
z=x.split() 

for w in z: 

    if ft==1: 
     ft=0 
     hm=0 
     name=w 
    else: 
     if hf==1: 
      hf=0 
      if hm==1: 
       hm1=int(w) 
      else: 
       if hm==2: 
        hm2=int(w) 
       else: 
        if hm==3: 
         hm3=int(w) 
        else: 
         if hm==4: 
          hm4=int(w) 
     else: 
      if w=='HM1': 
       hm=1 
       hf=1 
      else: 
       if w=='HM2': 
        hm=2 
        hf=1 
       else: 
        if w=='HM3': 
         hm=3 
         hf=1 
        else: 
         if w=='HM4': 
          hm=4 
          hf=1 

     list_values = [hm1, hm2, hm3, hm4] 
     average = float(sum(list_values))/len(list_values) 
     print hm1, hm2, hm3, hm4, average 

当我运行程序我接收:Python列表,文件排序

罗伯特0 90 80 92 65.5 布丽特妮98 92 0 0 47.5 唐86 93 100 94 93.25 查尔斯86 0 0 96 45.5 萨姆90 0 70 0 40.0

我想获得的数据按字母顺序显示:

布丽特妮98 92 0 0 47.5 查尔斯86 0 0 96 45.5 唐86 93 100 94 93.25 罗伯特0 90 80 92 65.5 萨姆90 0 70 0 40.0

我曾尝试使用的.sort排序()或排序(集(X)),但总是收到错误。我不想对文件本身进行排序,但是在它打印数字和平均值之前,我需要它对文件进行排序。谢谢!任何帮助深表感谢!

+0

您可以使用'elif',而不是无限嵌套。 – zch

回答

0

你可以尝试以下方法,

lines = grades_list.readlines() 
lines.sort() 

然后继续split和处理每一行。

+0

或者相当简洁地说:'lines = sorted(grades_list)',它们同时徘徊并排序它们。 – ShadowRanger