查看成绩数据,包括学生姓名,成绩和学分,以便根据gpa,学分或姓名订购数据

时间:2014-01-29 00:03:12

标签: python python-2.7

我正在从文本文件中读取数据,并希望按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')没有给出我期望的输出。我不确定我做错了什么。我想,在我尝试添加camparison函数cmpGpa之前,我会先完成第一部分工作。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

new_id = (st.getName, st.getGpa)中调用函数后,您已忘记了parantheses。将其更改为new_id = (st.getName(), st.getGpa()),我认为你会更好。


关于st = makeStudent(line)的代码似乎没有问题 - 我猜你的输入文件存在一些问题。尝试打印每一行,看看输出是否符合预期。如果这看起来不错,请尝试在分割线后打印变量,看看是否符合您的要求。你可能会在某个地方找到一个小虫子。


您可以考虑的其他几件事情:

  • 使用key对数据进行排序比cmp更容易faster(参见注释8),并且是自Python 2.4以来排序列表的preferred way

  • 在您的情况下,sorted(your_list, key=lambda x: x.getGpa())将根据其gpa对学生实例列表进行排序。

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

  • 除非您有充分理由实施这些方法,否则请删除get_variable_name课程中的Student方法。正如代码现在所示,我认为不需要它们,只需直接访问变量即可。