为什么这段代码只在文本文件中保存一行?

时间:2014-06-05 07:55:01

标签: python

所以我发现这个代码用于在线解决河内问题,但是尝试修改代码以将每个打印行保存在文本文件中。问题是我只保存了一行,而且我完全不知道为什么。我对此非常陌生,如果有人想回答,我会很感激。

def hanoi(ndisks, startPeg=1, endPeg=3):
    text_file = open("hanoiresults.txt", "w")
    j = 0
    i = j

    if ndisks:
        hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
        print "Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg)
        text_file.write("Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg) + "\n")
        j +=1
        hanoi(ndisks-1, 6-startPeg-endPeg, endPeg) 
    text_file.close()

hanoi(ndisks=12)

3 个答案:

答案 0 :(得分:1)

每次调用hanoi()并重写内容时,您都会重新打开文件。

相反,您应该打开它一次并将其作为参数传递:

def hanoi(ndisks, startPeg=1, endPeg=3, text_file):
    #...
        hanoi(ndisks-1, startPeg, 6-startPeg-endPeg, text_file=text_file)
        #...
        hanoi(ndisks-1, 6-startPeg-endPeg, endPeg, text_file=text_file)
    #...

with open("hanoiresults.txt", "w") as f:
    hanoi(ndisks=12, text_file=f)

以附加模式("a")打开也有效,但是您需要先清除该文件,然后不必要地关闭并重新打开它。

如果您不想传递参数(例如由于堆栈大小问题),您可以使用全局变量来保持文件打开。但是,全局变量通常为frowned upon

答案 1 :(得分:0)

您必须使用追加模式打开文件:

text_file = open("hanoiresults.txt", "a")

答案 2 :(得分:-1)

由于这一行:

text_file = open("hanoiresults.txt", "w")

您必须以追加模式打开文件。每次方法递归时,它都会以写入模式打开文件,从而截断文件内容。

相反,请执行:

text_file = open("hanoiresults.txt", "a")

更多关于文件阅读和撰写here