2012-02-03 30 views
1

我想將多行列表從一個函數傳遞給另一個函數,但我無法弄清楚它是如何完成的。下面是代碼我迄今爲止:如何在python中將循環數據從一個函數傳遞給另一個函數?

def readfile(): 
'''Read a text file; return a string holding the text''' 
    f = open("numbers.txt", 'r') 
    line = f.readlines()    
    f.close()   
    return line 

def dataConversion(lines): 

    lst = [] 
    for element in lines: 
     lst = element.strip() 
     lst = map(int, lst) 
     print lst   
return lst 

def evenNumberList(lsts): 
    print lsts 

def main():  

    lines = readfile() 
    lsts = dataConversion(lines) 
    doubledList = evenNumberList(lsts) 

main() 

的dataConversion的輸出(線)的功能是:

[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 0, 2, 6, 2, 6] 
[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 1, 0, 7, 0, 7] 
[4, 0, 1, 2, 8, 8, 8, 8, 8, 8, 8, 8, 1, 8, 8, 1] 
[4, 5, 5, 2, 7, 2, 0, 4, 1, 2, 3, 4, 5, 6, 7, 7] 
[4, 5, 3, 9, 9, 9, 2, 0, 4, 3, 4, 9, 1, 5, 6, 2] 
[4, 9, 9, 2, 7, 3, 9, 8, 7, 1, 6, 0, 0] 
[4, 9, 9, 2, 7, 3, 9, 8, 7, 0, 0, 1, 7] 
[8, 0, 8, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[5, 5, 8, 8, 3, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[5, 4, 9, 1, 9, 4, 6, 9, 1, 5, 4, 4, 4, 9, 2, 3] 
[5, 4, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 8] 
[3, 7, 8, 2, 8, 2, 2, 4, 6, 3, 1, 0, 0, 0, 5] 
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1] 
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1] 
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 0] 
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 1] 
[6, 0, 4, 1, 2, 7, 3, 9, 9, 0, 1, 3, 9, 4, 2, 4] 
[6, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7] 
[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4] 

雖然輸入到evenNumberList(LSTS)函數是:

[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4] 

如何讓它們匹配?我需要evenNumberList(lsts)函數中的所有代碼行,而不僅僅是一行。我的教授告訴我,我需要從循環內調用函數,但我一直無法弄清楚如何做到這一點。

回答

0

dataConversion()中,您每次都通過循環重新綁定lst變量,因此您只返回最後一次迭代結果的數據。

您的主循環表明您期望從此函數獲得的是lsts或多個列表,但您只返回一個。

爲了讓您一開始,在dataConversion()你應該創建一個變量,它會返回值,也許叫它lstslist_of_lists,然後在for循環做lsts.append(lst)其中lst是您目前從element創建整數列表。

+0

非常感謝您的幫助。我想我現在可以弄清楚什麼。 – 2012-02-03 21:52:43

+0

@AbigailHackney - 沒問題,如果我的答案幫助你[接受它](http://meta.stackexchange.com/a/5235/155356),請點擊答案旁邊複選標記的大綱。 – 2012-02-03 22:00:45

0

我會寫你這樣的代碼:

def dataConversion(lines): 
    temp = [] 

    for element in lines: 
    converted = map(int, element.strip()) 
    temp.append(converted) 

    return temp 

def evenNumberList(lsts): 
    return lsts 

if __name__ == '__main__': 
    lines = open("numbers.txt", 'r').readlines() 
    lsts = dataConversion(lines) 
    doubledList = evenNumberList(lsts) 

    print lsts 
    print doubledList 

你有存在的主要問題是使用return正常。 print不是return。你的evenNumberList()函數完全沒有返回。

另外,在dataConversion()中,您在空列表上使用了map(),它也沒有產生實際輸出。

我的經驗法則:不要在類似的函數中使用print聲明。將它們從函數中移出並放入實際的程序中,因爲錯誤更容易被誤解。

+0

謝謝你的幫助。我意識到印刷品不是回報。在那裏印刷的唯一原因是我可以看到我的輸出是什麼。當我發佈代碼時,我忘了刪除它。此外,我的evenNumberList()函數不應該返回任何東西。我仍然試圖將正確的數據加入其中。一旦我得到正確的數據,我會做我必須做的,以獲得我需要的輸出。在這個學期,我還沒有足夠的知道__name__和__main__是什麼,所以我不能使用這些,但是現在我知道我出錯了。再次感謝你。 – 2012-02-03 21:51:17

+0

運行Python文件時,會運行'if __name__ =='__main __''內部的內容。 – Blender 2012-02-03 22:15:59

相關問題