2010-12-20 27 views
-1

因此,基本上我對python和編程一般來說都很陌生。我想知道,你有一個情況,你有一個字典,並詢問用戶他們是否要添加或刪除字典中的術語。因此,我知道如何在字典中添加或刪除該術語,但是如何在下次程序啓動時「保存」該數據。基本上,如果用戶在字典中添加了一個單詞,然後我問他們是否想用while循環返回主菜單,那麼如何製作它,以便他們添加的單詞現在在字典中永久保存在字典中,並返回到菜單並啓動程序結束?在python中,你如何循環字典,但保持對它做出的更改

這是我的。你要知道我是一個初學者,所以如果它看起來怪異,那麼對不起......哈哈....沒什麼大礙:

loop=None 
while True: 
    #The initial dictionary 
    things={"house":"a place where you live", 
      "computer":"you use to do lots of stuff", 
      "iPod":"mp3 player", 
      "TV":"watch shows on it", 
      "bed":"where you sleep", 
      "wii":"a game system", 
      "pizza":"food"} 


    #Menu 
    print(""" 

     Welcome to the Dictionary of Things 
      Choose your preference: 

     0-Quit 
     1-Look up a Term 
     2-Add a Term 
     3-Redefine a Term 
     4-Delete a Term 

     """) 

    choice=input("\nWhat do you want to do?: ") 

elif choice=="2": #Adds a term for the user 
     term=input("What term do you want to add? ") 
     if term not in things: 
      definition=input("Whats the definition? ") 
      things[term]=definition #adds the term to the dictionary 
      print(term,"has been added to the dictionary") 
      menu=input(""" 
        Would you like to go back to the menu? 
          Yes(Y) or No(N): """) 
       if menu=="Y": 
        loop=None ----->#Ok so if they want to go back to the menu the program should remember what they added 
       elif menu=="N": 
        break 
+0

顯示代碼,您演示您遇到的問題可以幫助您獲得更有用的答案。 – 2010-12-20 00:50:34

+0

好的,我會添加它,但它可能不會很漂亮 – d8595 2010-12-20 00:57:23

+0

優秀!我已經更新了我的答案。但在你看之前,問問自己:「當你進入循環的開始時,會發生什麼第一件事?」。 – 2010-12-20 01:18:23

回答

1

更新:

你的問題是,你重新定義字典,每一個循環的開始。將字典的開始定義移動到While循環之前,並且您正在開展業務。


詞典和列表是可變對象。因此,如果在一個功能修改,修改後撐在那裏,它被稱爲太:

def main_function(): 
    do someting 
    mydict = {'a': 2, 'b': 3} 
    subfunction(mydict) 
    print mydict 

def otherfunction(thedict): 
    dict['c'] = 5 

如果你現在運行main_function,它會打印出一本詞典,其中包括「C」。

+0

好吧我也會試試這個.....這可能是對我來說最簡單的方法....不知道是否 – d8595 2010-12-20 00:55:05

+0

ooohhhh .....好.........哇傻我 – d8595 2010-12-20 01:21:54

+0

@david:這都是學習編程的一部分。 :) – 2010-12-20 01:22:58

1

正如米沙已經說過,鹹菜是一個好主意,但一個簡單的方法是使用shelve模塊,該模塊在內部使用(c)醃菜並且完全按照您的要求進行。 從文檔:

import shelve 

d = shelve.open(filename) # open 

d[key] = data # store data at key (overwrites old data if 
       # using an existing key) 
data = d[key] # retrieve a COPY of data at key (raise KeyError if no 
       # such key) 
0

我認爲這可能有助於更具體談談你的程序的結構。這聽起來像是你想要將字典作爲外部文件持久化,以便在應用程序的後續運行中加載/重新加載。在這種情況下,你可以使用泡菜庫,像這樣:

import pickle 
dictionary = {"foo": "bar", "spam": "egg"} 

# save it to a file... 
with open("myfile.dct", "wb") as outf: 
    pickle.dump(dictionary, outf) 

# load it in again: 
reloaded = {} 
with open("myfile.dct", "rb") as inf: 
    reloaded = pickle.load(inf) 
+0

o_0 .....哦,上帝....確定這些反應是有幫助的,只是混淆因爲我是如此新的編程。好吧,所以基本上我必須將字典保存到一個文件,然後重新加載它?所以一旦用戶添加或刪除了一個術語,我應該保存它,當程序重新啓動時,它應該帶回帶有新信息的字典。 – d8595 2010-12-20 00:50:29

+0

@david:如果「重啓」意味着程序退出並重新啓動,那麼是的,您必須將數據保存到文件中。它與Word或寶石沒有什麼不同,如果更改沒有保存,那麼是的,它們不會被保存。 如果您使用「重新啓動」意味着您返回到主菜單(如您的問題所示),那麼不會,您不必保存任何內容。 – 2010-12-20 00:57:58

+2

是的我的意思是重新啓動,因爲在人仍然在程序中,但它回到主菜單。每次程序循環回到開始時,你如何做到這一點,所以他們輸入的數據現在在字典中,當它最初不在第一次時。我也添加了代碼 – d8595 2010-12-20 01:14:38