在这种情况下如何擦除q?并按字母顺序对文件进行排序?

时间:2016-05-23 09:21:07

标签: python

我正在尝试编写一个程序,该程序从用户获取输入并按字母顺序将其放入文件中。(Names.txt是一个按字母顺序列出给定名称的文件)

这是我到目前为止所做的。

def main():
    outfile = open("Names.txt","a")
    name1 = 0
    while True:
        if name1 != "q":
            name1 = input("Enter a first name, if you want to quit, enter q: ")
            list1 = []
            list1.append("\n"+name1)
            outfile.writelines(list1)
        else:
            break
    list1.sort()    
main()

假设我进入Brian,Tyler和q退出。 但即使我在while循环中使用break,我仍然在文件中有q。 另外,为了将输入放在适当的位置,我使用了排序,但没有变化..

我的代码出了什么问题?请帮忙。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

是的,首先分配name1并将其写入文件,并且检查(name1!=“q”)仅在下一次迭代中中断。 然后你正在整理并且什么都不做。您需要对列表进行排序,然后写入文件以查看排序列表。

答案 1 :(得分:0)

您应该将input()移出if阻止。

def main():
    outfile = open("Names.txt","a")
    while True:
        name1 = input("Enter a first name, if you want to quit, enter q: ")
        if name1 != "q":
            list1 = []
            list1.append(name1+"\n")
            outfile.writelines(list1)
        else:
            break
    list1.sort()
main()

答案 2 :(得分:0)

您的代码中存在一些错误。

首先,您应该在获得输入后检查name1 != "q"。你这样做,你得到输入,将它附加到列表,写入文件,然后你检查名称是否是q顺序,你应该检查之前将它附加到列表。

第二个错误是当你执行list1 = []时,你在每次迭代时都会覆盖列表,因此你最多只能在列表中有一个名字,你应该在循环之前初始化列表。 / p>

最后,您应该将列表写入文件后对列表进行排序,而不是在循环的每次迭代中。现在的方式,名称将不会在文件中排序。此外,当您使用outfile.close()写入文件时,应关闭该文件。

代码应该是这样的:

def main():
    outfile = open("Names.txt","a")
    list1 = []
    while True:
        name1 = input("Enter a first name, if you want to quit, enter q: ")
        if name1 != "q":
            list1.append(name1+"\n")
        else:
            break
    list1.sort()
    for name in list1:
        outfile.writelines(name)
    outfile.close()
main()