Python 在这种情况下,如何擦除q?然后按字母顺序对文件排序?

Python 在这种情况下,如何擦除q?然后按字母顺序对文件排序?,python,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,

我正在尝试编写一个程序,从用户那里获取输入,并按字母顺序将其放入文件中。(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()
假设我让布赖恩、泰勒和q退出。 但我仍然有一个文件中的q,即使我使用了中断在一个while循环。 另外,为了将输入放在正确的位置,我使用了sort,但没有任何变化

我的代码怎么了?请帮忙。
提前感谢。

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

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

您应该将
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()

您应该将
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()

您的代码中有几个错误

首先,您应该选中
name1!=“q”
在获得输入后。这样做的方式是,获取输入,将其附加到列表中,将其写入文件中,然后检查名称是否按顺序为q,在将其附加到列表中之前应进行检查

第二个错误是,当您执行
list1=[]
时,每次迭代都会覆盖列表,因此在任何时候列表中最多有一个名称,您应该在循环之前初始化列表

最后,您应该在对列表排序后将列表写入文件,而不是在循环的每次迭代中。按照现在的方式,名称将不会在文件中排序。此外,当您使用
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()

您的代码中有几个错误

首先,您应该选中
name1!=“q”
在获得输入后。这样做的方式是,获取输入,将其附加到列表中,将其写入文件中,然后检查名称是否按顺序为q,在将其附加到列表中之前应进行检查

第二个错误是,当您执行
list1=[]
时,每次迭代都会覆盖列表,因此在任何时候列表中最多有一个名称,您应该在循环之前初始化列表

最后,您应该在对列表排序后将列表写入文件,而不是在循环的每次迭代中。按照现在的方式,名称将不会在文件中排序。此外,当您使用
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()

您可以将
name1=input
行移动到
if nameq!=“q”
line为什么每次读取时都要将
list1
重置为
[]
?谢谢,我已经更改了所有这些。如果nameq!=“q”line为什么每次读取时都要将
list1
重置为
[]
?谢谢,我更改了所有这些。在执行代码之前文件“Names.txt”是否为空?如果在
outfile=open(“Names.txt”,“a”)行中使用参数“a”
它不会覆盖文件,它只会添加新名称(按顺序)在文件中已经存在的文件之后。因此,如果文件不是空的,名称可能不会排序。然后有两个选项,如果您更改
“w”
的参数
“a”
,它将完全覆盖文件,只保留最后一次运行代码的名称。如果要保留所有名称并在文件中排序,则需要在请求新名称之前读取文件中的名称并将其附加到
list1
中。如果在
outfile=open(“names.txt”,“a”)行中使用参数“a”,则在执行代码之前文件“names.txt”是否为空
它不会覆盖文件,只会在文件中已有的名称之后添加新名称(按顺序)。因此,如果文件不是空的,名称可能不会排序。然后有两个选项,如果您更改
“w”
的参数
“a”
,它将完全覆盖文件,只保留最后一次运行代码的名称。如果要保留所有名称并在文件中对其进行排序,则需要先读取文件中的名称并将其附加到
list1
,然后再请求新名称。