2016-04-21 43 views
-5

我需要編寫一個函數遞歸讀取文件中的所有字符並追加到列表中。函數需要兩個參數,即文件和列表。遞歸困擾着我。任何關於思考遞歸的提示我都很感謝。 貝婁是我編寫的用於打印列表的字符的代碼,無需遞歸。如何遞歸讀取列表中的所有字符?

def newChar(usrFile,usrList): 

    for line in usrFile: 
     for c in line: 
      usrList.append(c) 

    print(usrList) 


def main(): 
    usrFile = open("input.txt",'r') 
    usrList = [] 
    newChar(usrFile,usrList) 



main() 

結果:想想遞歸

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', 'p', 'r', 'i', 'n', 't', ' ', 'a', 'l', 'l', ' ', 't', 'h', 'e', 's', 'e', ' ', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', 's', '.'] 
+0

看起來你要我們寫一些代碼給你。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ]和[問]。 –

+0

遞歸中有很多信息。你有沒有試過查找一些指南和教程? – TigerhawkT3

+0

謝謝,更新了我現在的代碼。我不想讓別人寫我的代碼。我想了解他們將要經歷的步驟。 – anakim

回答

2

一種方法是嘗試解決只有一小部分的問題,然後想象遞歸調用「神奇」解決問題的其餘部分。重要的是,你必須考慮當問題的其餘部分解決微不足道時會發生什麼;這被稱爲基本案例

在這種情況下,我們可以在一次遞歸調用中解決的小塊是讀取單個字符(字節)。如果文件中沒有剩餘字符,則發生基本情況;當發生這種情況時,您不會在列表中添加任何內容,只返回您已經建立的內容。

這個想法可以實現如下。

f = open('test_file.txt', 'r') 
char_list = [] 

def read_rec(fh, chars): 
    curChar = fh.read(1) 
    if curChar: #returns False at the end of the file 
     chars.append(curChar) #append to chars 
     return read_rec(fh, chars) #recursively read the rest of the file 
    return chars 

print read_rec(f, char_list) 

輸出

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', 'm', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'G', 'a', 'r', 'r', 'e', 't', 't', '\n'] 
+0

非常有幫助,謝謝。認爲我陷入困境的地方是如何在不使用for循環的情況下創建文件列表。同樣,我仍然對如何在文件中移動感到困惑,不會增加它以移動到下一行? – anakim

+0

如果你還沒有,我會建議使用一個非常簡單的輸入文件(兩個或三個字符)來運行代碼,並使用pdb庫和set_trace來設置一些斷點,以便可以看到字符列表中發生了什麼每次遞歸調用。 –