使用Python写入文件 - ''虽然没有完成:"让我感到困惑

Kyl*_*ner 6 python while-loop

我有不到一年的编程经验.在学习阅读和编写文件时,我遇到了这个教程:http://www.penzilla.net/tutorials/python/fileio/

本教程提供以下示例作为创建和写入文件的简单脚本:

# Let's create a file and write it to disk.
filename = "test.dat"
# Let's create some data:
done = 0
namelist = []
while not done:
    name = raw_input("Enter a name:")
    if type(name) == type(""):
        namelist.append(name)
    else:
        break

# Create a file object:
# in "write" mode
FILE = open(filename,"w")

# Write all the lines at once:
FILE.writelines(namelist)

# Alternatively write them one by one:
for name in namelist:
    FILE.write(name)

FILE.close()  
Run Code Online (Sandbox Code Playgroud)

我复制了这段代码并通过Python 2.7.3 Shell运行它.我被反复提示输入字符串,这些字符串将附加到将写入文件的列表中(这对我来说很有意义).我不明白的是退出While循环的条件("未完成时:").我认为这意味着我在提示符处输入完成以退出循环并随后写入文件,但完成后无效.然后我认为在提示符下输入的任何非字符串应该打破循环并写入文件.我根本无法让循环中断; 对于我在提示符处输入的任何内容,我只是再次提示"输入名称:".

通过删除While循环并保留if/else语句,我得到的代码适用于单个提示.谁能告诉我我在这里不理解的是什么?我猜这是一个相当简单的概念,在教程中没有解释,因为它被认为是显而易见的.由于"完成"是一个常见的单词,我无法找到任何Python特定的含义.

Ham*_*ish 2

done在第 3 行分配一次:

done = 0
Run Code Online (Sandbox Code Playgroud)

因此,只要done仍然是“非0”,while循环就会继续循环:

while not done:
Run Code Online (Sandbox Code Playgroud)

即它将继续永远循环,除非它命中一个break语句(第 11 行)。不幸的是,代码有缺陷,这种情况永远不会发生。

如果您想在键入“done”时停止,请将 if 语句更改为:

if name == "done":
Run Code Online (Sandbox Code Playgroud)

done但是,请注意,上面的文字字符串与之前分配的变量无关done