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