2014-06-05 17 views
1

因此,我發現這個代碼在線解決河內問題,但嘗試修改代碼以保存文本文件中的每個打印行。問題是我只能保存一行,而我完全不知道爲什麼。我很新,如果有人想回答,我會很感激。爲什麼此代碼僅在文本文件中保存一行?

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) 
+1

你不追加到文件,所以基本上你打開並覆蓋內容 – EdChum

+0

感謝您的編輯 – user3710101

回答

-1

因爲該行的:

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

你要打開的追加模式的文件。每次您的方法遞歸時,它都會以寫模式打開文件,從而截斷文件的內容。

相反,做一個:

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

更多關於文件讀寫here

+0

downvoter可以幫助我改進我的答案? – shaktimaan

+0

不是很方便,呃?有人真的給了建設性的批評?那麼,我當時很坦率地首選你的答案,因爲它很簡單地回答了我的問題,讓我明白我犯的錯誤。 – user3710101

+0

我不是原來的downvoter,但我可以看到它會發生的原因。並非所有系統都允許您同時打開多個文件。另外,如果你這樣做,我相信輸出緩衝可能會導致數據丟失。另一個答案更可靠。 (ping @ user3710101,所以他看到了這一點) – user2357112

0

你必須打開與追加模式的文件:

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

您正在打開該文件重新撥打hanoi()並重寫內容。

相反,你應該再打開它,並把它作爲一個參數:在附加模式("a"

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) 

開放也可以,但是,那麼你需要先清除文件,你不必要地關閉並重新打開它。

如果您不想傳遞參數(例如,由於堆棧大小的考慮),您可以使用全局變量來保持文件打開。但是,全局變量一般爲frowned upon

相關問題