为用户提供根据输入对从txt文档创建的列表进行排序的选项

时间:2016-02-29 15:54:11

标签: python list

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

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语句来排序用户如何选择然后以正确的顺序打印列表?

1 个答案:

答案 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)如果您使用相同的文件对象,它将输出一个空的string,因为你已经读过文件中的所有行,光标就在最后。

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关键字作为上下文管理器来确保文件正确关闭。