2017-05-24 17 views
0

我有這樣的代碼爲Python:如何通過兩個函數根據需要多次編輯字典?

def additems(): 
    items = {} 
    add = input("What would you like to add?") 
    value = input("What value would you like to assign?") 
    items[add] = value 
    return items 

def resume(): 
    decision = input("would you like to continue?") 
    if decision == "Y": 
     main() 
    else: 
     print("Exiting...") 

def main(): 
    items = additems() 
    print(items) 
    resume() 

main() 

的目標是能夠爲我想編輯「項目」多次,而總是返回更新的字典回主。但是,就目前而言,我只能在函數「additems」內編輯字典,然後在「main」運行時重置字典。我不想在main運行時重置字典,我總是希望它打印更新的「items」字典。所以,而不是:

「你想補充什麼?」 「 - G 」您希望分配什麼值? 「 - 3 」{'G':'3'}「 」你想繼續嗎?「 - Y 「你想添加什麼?」 「 - J 」您希望分配什麼值? 「 - 4 」{'J':'4'}「 :

「你想添加什麼?」 「 - G 」您希望分配什麼值? 「 - 3 」{'G':'3'}「 」你想繼續嗎?「 - Y 「你想添加什麼?」 「 - J 」您希望分配什麼值? - 4 「{'G':'3','J':'4'}」(這兩個都是打印的)

...並且只要我提供輸入的Y,這意味着我能夠繼續。

如果你還沒有猜到,我對Stack和Python都很陌生,但是我會很感激。因此,當我的意思是幫助時,我的意思是幫助那些剛接觸Python和編程的人,而不是幫助那些有經驗的人。只要回答,就好像你正在跟一個5歲的孩子說話一樣,並節省我們所有的麻煩。

+0

讓'items'成爲一個全球性的(如@AChampion說的'blah!'),然後從'additems'中刪除定義和'return',然後從'main'中調用'additems'而不是指定 –

+0

因爲您正在遞歸在調用堆棧中,您需要將dict與它一起傳遞或創建一個全局字典(不建議,如果可以避免它 - 並且可以避免它!)。或者,反覆實施。 – AChampion

+0

感謝@Nick A爲您提供的迅速建議!我從來沒有想過要讓字典成爲全局的,而且我已經這樣做了,並且它可以工作(:D),但理想情況下,我將它存儲在某個函數中而不是替代函數中。因此,我的下一個問題當然是:我如何去實現這個目標?最好以我無能的心理能夠理解的方式回答。 –

回答

1

正如@AChampion指出你不需要遞歸,只需將函數中的items函數傳遞給additems即可。

由於dict對象是可變的,我們並不需要傳遞和返回他們,只是在需要的情況下發生變異。

我們可以無限循環替代遞歸像

def additems(items): 
    add = input("What would you like to add?\n") 
    value = input("What value would you like to assign?\n") 
    items[add] = value 


def main(): 
    items = {} 
    while True: 
     additems(items) 
     print(items) 
     decision = input("would you like to continue?\n") 
     if decision != "Y": 
      print("Exiting...") 
      return 


main() 

我添加換行符'\n'對每個問題的結尾,使其更簡單的用戶交互,如果你不需要他們 - 感覺免費刪除。

相關問題