Python 查看成绩数据,包括学生姓名、成绩和学时,根据gpa、学时或姓名排序数据
我正在从文本文件中读取数据,并希望按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
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)
的代码似乎没有问题-我猜您的输入文件有一些问题。试着打印每一行,看看输出是否如预期的那样。如果这看起来还可以,试着在分割行之后打印变量,看看是否符合您的要求。你可能会在某处发现一只小虫子
您可以考虑以下几点:
- 使用
对数据进行排序比键
更容易(请参见注释8),并且是自Python 2.4以来最常用的排序列表cmp
- 在您的例子中,
将根据学生的gpa对学生实例列表进行排序sorted(您的_列表,key=lambda x:x.getGpa())
<> L> >P>如果GPA值是静态的(<代码>小时和 - 在
类中去掉你的Student
方法,除非你有充分的理由去实现它们。正如代码所示,我不认为有必要使用它们,只需直接访问变量即可Get\u variable\u name
hours
或qpoints
可能会发生变化,则最好使用一些set\u变量
方法在设置新值后更新gpa
infoStr.split('\t')
而不是string.split(infoStr,'\t')
谢谢大家的回复@ValekHalfHeart,我在代码中添加了很多print语句,它并没有将字符串分成三部分。我得到的输出对我来说毫无意义。是的,每一行都与第一行相同,重复了n次(列表中有n个学生)。@SteinerLima我按照你的建议离开了学生班。@SteinerLima直到我做了更改,我才看到你的评论。代码仍然不起作用,我是否正确使用排序函数?不,使用lambda x:x[1]