2016-02-29 16 views
0

该程序将询问用户他们想要查看结果的类,并询问他们想要如何对它们进行排序。该列表是从文本文档中的行创建的。 程序现在需要做的就是在排序选择完成后进行排序,然后按照选择的方式进行打印。为用户提供了基于输入对从txt文档创建的列表进行排序的选项

print ("Please enter the class number below.") 
print ("After that please select how you would like to sort them") 

classnumber = input("Which results do you want to view? (enter class number)") 

if classnumber == ('1'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 
if classnumber == ('2'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 
if classnumber == ('3'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 

print ("Press a For Alphabetically") 
print ("Press h For Highest To Lowest") 
print ("Press m For Mean (Average Highest To Lowest)") 

sort = input ("How would you like to sort the results?") 

if sort == 'a': 
     sorted("class1.txt") 
     print([i.strip().split() for i in ("class1.txt").readlines()]) 
if sort == 'h': 
     sorted(reverse=True) 
     print([i.strip().split() for i in ("class.2txt").readlines()]) 
if sort == 'm': 
     averages=[] 
     sorted(reverse=True) 
     print([i.strip().split() for i in ("class3.txt").readlines()]) 

如何将我得到的if语句用户如何选择进行排序,然后打印以正确的顺序列表?

+0

你有很多印刷错误... – Idos

+0

你的错误是什么?程序结束并且不打印排序列表 – MarkyPython

+0

。 –

回答

1

在,你打开文件,并通读所有行,保存在一个列表输出称为li代码的这一部分:

if classnumber == ('1'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 
if classnumber == ('2'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 
if classnumber == ('3'): 
     li = [i.strip().split() for i in open("class1.txt").readlines()] 

然后在你的代码的这一部分,你尝试再次读取文件对象中的行,但是1)实际上并没有打开文件,2)如果使用相同的文件对象,它将输出一个空字符串,因为您已经读过文件中的所有行并且光标在最后。

if sort == 'a': 
     sorted("class1.txt") 
     print([i.strip().split() for i in ("class1.txt").readlines()]) 
if sort == 'h': 
     sorted(reverse=True) 
     print([i.strip().split() for i in ("class.2txt").readlines()]) 
if sort == 'm': 
     averages=[] 
     sorted(reverse=True) 
     print([i.strip().split() for i in ("class3.txt").readlines()]) 

因为你已经读到的一切到此列表中指定li,您可以使用,而不是试图打开该文件再次,像这样:

if sort == 'a': 
     sorted("class1.txt") 
     print([i.strip().split() for i in li]) 
if sort == 'h': 
     sorted(reverse=True) 
     print([i.strip().split() for i in li]) 
if sort == 'm': 
     averages=[] 
     sorted(reverse=True) 
     print([i.strip().split() for i in li]) 

你还有关于一些错误使用sorted()函数,即sorted()返回列表排序的副本,它不修改原始列表。

还值得一提的是,你从来没有真的close()你的文件对象,这是一个灾难等待发生。我会使用with关键字作为上下文管理器来确保文件正确关闭。

相关问题