2010-12-20 8 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

問題を実証したコードを表示すると、より役立つ回答が得られます。 –

+0

私はそれを追加しますが、おそらくそれほど美しくないでしょう – d8595

+0

優秀!私は私の答えを更新しました。しかし、あなたが見る前に、 "あなたがループの始めに行くときに起こる最初のことは何ですか?" –

答えて

1

更新:

あなたの問題は、各ループの開始時に辞書を再定義することです。辞書の開始定義をWhileループの前に移動し、ビジネスに参加している。


ディクショナリとリストは可変オブジェクトです。それは関数内で変更された場合、それがあまりにも呼ばれていたところしたがって、それは変更されたままになります:あなたが今main_functionを実行すると、それは「C」を含む辞書を出力します

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

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

+0

これも試してみてください.....これは私のための最も簡単な方法かもしれません....確かにtho – d8595

+0

ooohhhh ..... ok ......... wow愚かな私 – d8595

+0

@ david:それはすべてプログラムの学習の一部です。 :) –

1

:私は初心者だとそれが深刻な奇妙な、そして申し訳ありません...笑....何も見えない場合は断っておきますshelveモジュールを使用してください。モジュールは内部的に(c)pickleを使用し、ユーザーが求めるものを正確に行います。ドキュメントから :

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 ..... oh lord .... okこれらの回答は役に立ちましたか?さて、基本的に私は辞書にファイルを保存してからリロードする必要がありますか?したがって、ユーザーが用語を追加または削除すると、それを保存する必要があり、プログラムが再始動すると、新しい情報を含む辞書が戻されます。 – d8595

+0

@david:「再起動」とは、プログラムが終了した後でもう一度起動した場合、はい、データをファイルに保存する必要があります。 Wordや宝石などと変わりません。変更が保存されていない場合は、保存されません。 「再起動」を選択した場合、メインメニュー(質問に示されているように)に戻り、いいえ、何も保存する必要はありません。 –

+2

ええ、私は人がプログラムにまだあるように再起動しますが、メインメニューに戻ります。プログラムが最初にループするたびに、どのようにしてそれを作成するのですか?入力したデータは、もともとは最初にそこになかったときに辞書に入ります。私もコードを追加しました – d8595

関連する問題