Python 查看成绩数据,包括学生姓名、成绩和学时,根据gpa、学时或姓名排序数据

Python 查看成绩数据,包括学生姓名、成绩和学时,根据gpa、学时或姓名排序数据,python,python-2.7,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 f

我正在从文本文件中读取数据,并希望按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之前,我会让第一部分工作起来。谢谢你的帮助

您已经忘记了在
new\u id=(st.getName,st.getGpa)
中调用函数后的偏执。把它改成
new\u id=(st.getName(),st.getGpa())
,我想你会过得更好


关于
st=makeStudent(line)
的代码似乎没有问题-我猜您的输入文件有一些问题。试着打印每一行,看看输出是否如预期的那样。如果这看起来还可以,试着在分割行之后打印变量,看看是否符合您的要求。你可能会在某处发现一只小虫子


您可以考虑以下几点:

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

  • 在您的例子中,
    sorted(您的_列表,key=lambda x:x.getGpa())
    将根据学生的gpa对学生实例列表进行排序

  • <> L> >P>如果GPA值是静态的(<代码>小时和 QPox不改变),则应考虑在为什么每次访问时都要重新计算它?如果初始化后
    hours
    qpoints
    可能会发生变化,则最好使用一些
    set\u变量
    方法在设置新值后更新gpa

  • Student
    类中去掉你的
    Get\u variable\u name
    方法,除非你有充分的理由去实现它们。正如代码所示,我不认为有必要使用它们,只需直接访问变量即可


您说输出“不正确”。您得到的确切输出以及与预期输出的比较结果如何?请注意,您可以执行
infoStr.split('\t')
而不是
string.split(infoStr,'\t')
谢谢大家的回复@ValekHalfHeart,我在代码中添加了很多print语句,它并没有将字符串分成三部分。我得到的输出对我来说毫无意义。是的,每一行都与第一行相同,重复了n次(列表中有n个学生)。@SteinerLima我按照你的建议离开了学生班。@SteinerLima直到我做了更改,我才看到你的评论。代码仍然不起作用,我是否正确使用排序函数?不,使用
lambda x:x[1]