2014-01-29 35 views
1

我正在阅读文本文件中的数据,并希望通过gpa命令数据。我写了下面的代码查看学生数据,包括学生姓名,成绩和学分,以便根据gpa,学分或姓名排列数据

import string 

def main() : 
my_list = [] 
# open the input file for reading 
filename = raw_input("Enter name of the grade file: ") 
infile = open(filename, 'r') 
print infile 
# process subsequent lines of the file 
for line in infile : 
    name, hours, qpoints = line.split('\t') 
    gpa = float(qpoints)/float(hours) 
    my_tuple = (name, gpa) 
    print name, gpa 
    my_list += my_tuple 
data = sorted(my_list, key = lambda x: gpa) 


if __name__ == '__main__' : 
    main() 

我得到一个错误的main()我发现“line.split(” \ t')不给我所期望的输出。我不确定我做错了什么。我想,在尝试添加相容功能cmpGpa之前,我会先完成第一部分工作,感谢您的帮助。

+0

你说输出“不正确”。究竟你得到了什么产出,以及它与预期产出相比如何? – ApproachingDarknessFish

+0

请注意,您可以使用'infoStr.split('\ t')'而不是'string.split(infoStr,'\ t')' – justhalf

回答

1

new_id = (st.getName, st.getGpa)函数调用后,您已经忘记了该禁忌。将其改为new_id = (st.getName(), st.getGpa()),我认为你会过得更好。


关于st = makeStudent(line)的代码似乎并不成为问题 - 我猜想,有一些问题,你的输入文件。尝试打印每一行,看看输出是否如预期。如果这看起来没问题,试着在分割线之后打印这些变量,看看它是否像你想要的那样。你可能会在某处找到一个小错误。


一对夫妇的其他东西,你可以考虑:

  • 使用key排序您的数据更容易和faster(见注8)比cmp,是因为排序列表的preferred way Python 2.4。

  • 就你的情况而言,sorted(your_list, key=lambda x: x.getGpa())将根据其gpa对一列Student实例进行排序。

  • 如果gpa值是静态的(hoursqpoints不改变),您应该考虑在__init__中计算gpa。为什么你想在每次访问时重新计算它?如果hoursqpoints可能会在初始化后发生变化,那么在设置新值之后,可能会更好地制作一些更新GPA的set_variable方法。

  • 在您的Student课中摆脱您的get_variable_name方法,除非您有充分的理由实施它们。现在的代码,我没有看到他们的需要,只需直接访问变量。

+0

谢谢大家,感谢您的回应。 @ValekHalfHeart,我在代码中添加了很多打印语句,它不会将字符串分成三部分。我得到的输出对我来说没有意义。它是 <__ main __。0x02F3D350的学生实例> <绑定方法Student.getName <__ main __。学生实例在0x02F3D350 >><绑定方法Student.getGpa <__ main __。学生实例在0x02F3D350 >>,每一行与第一个重复n次(列表中的学生数量)相同。 –

+0

@ShubhaRajopadhye我更新了我的答案,请看看。 –

+0

@SteinerLima我按照你的建议,摆脱了学生班。 –

相关问题