2010-12-20 7 views
-1

Also im Grunde genommen neu für Python und Programmierung im Allgemeinen. Ich frage mich, ob Sie eine Situation haben, in der Sie ein Wörterbuch haben und fragen Sie den Benutzer, ob er Begriffe im Wörterbuch hinzufügen oder löschen möchte. Ich weiß also, wie man den Begriff in Wörterbüchern hinzufügt oder löscht, aber wie man diese Daten für das nächste Mal, wenn das Programm startet, "speichert". Wenn der Benutzer dem Wörterbuch ein Wort hinzufügte und sie dann fragte, ob er mit einer while-Schleife zum Hauptmenü zurückkehren wollte, wie würden Sie es dann so machen, dass das hinzugefügte Wort nun dauerhaft im Wörterbuch ist, wenn er zurückkehrt das Menü und startet das Programm über?In Python, wie schleift man ein Wörterbuch, behält aber die vorgenommenen Änderungen bei

Hier ist was ich hatte. Wohlgemerkt, ich bin ein Anfänger und so, wenn es sieht seltsam, dann sorry ... lol .... nichts Ernst:

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

Wenn Sie einen Code zeigen, mit dem Sie Ihr Problem demonstrieren, erhalten Sie hilfreichere Antworten. –

+0

ok ich werde es hinzufügen, aber es wird wahrscheinlich nicht schön – d8595

+0

Ausgezeichnet! Ich habe meine Antwort aktualisiert. Aber bevor Sie schauen, fragen Sie sich: "Was ist das erste, was passiert, wenn Sie an den Anfang der Schleife gehen". –

Antwort

1

Update:

Ihr Problem ist, dass Sie das Wörterbuch zu Beginn jeder Schleife neu zu definieren. Verschieben Sie die Startdefinition des Wörterbuchs vor die While-Schleife, und Sie befinden sich im Geschäft.


Wörterbücher und Listen sind veränderbare Objekte. Daher, wenn es in einer Funktion geändert wird, bleibt es geändert, wo es auch genannt wurde:

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

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

Wenn Sie jetzt main_function ausführen, wird es ein Wörterbuch drucken, die ‚c‘ enthält.

+0

ok ich werde das auch versuchen ..... das könnte der einfachste Weg für mich sein .... nicht sicher, dass – d8595

+0

ooohhhh ..... ok ......... wow dumme mich – d8595

+0

@david: Es ist alles ein Teil des Lernens zu programmieren. :) –

1

Wie Misha schon gesagt, Gurke ist eine gute Idee, aber ein einfacher Weg ist das Modul shelve zu verwenden, das (c) intern pickle und genau das tut, wonach Sie fragen. Aus der Dokumentation:

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

ich denke, es präziser über die Struktur Ihres Programms sein könnte helfen. Es klingt, als ob Sie ein Wörterbuch als eine externe Datei beibehalten möchten, die bei nachfolgenden Läufen Ihrer App geladen/neu geladen werden soll. In diesem Fall könnten Sie die Gurke Bibliothek wie so verwenden:

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 herr .... ok diese antworten sind hilfreich ich bin nur verwirrt cuz im so neu zu programmieren. Ok also im Wesentlichen müsste ich das Wörterbuch in eine Datei speichern und dann neu laden? Sobald der Benutzer einen Begriff hinzufügt oder löscht, sollte ich ihn speichern und wenn das Programm neu startet, sollte er das Wörterbuch mit den neuen Informationen zurückbringen. – d8595

+0

@david: Wenn Sie mit "Neustart" meinen, dass das Programm beendet wird und Sie es dann erneut starten, dann ja, Sie müssen die Daten in eine Datei speichern. Es ist nicht anders als Word oder ein Juwel usw. Wenn Änderungen nicht gespeichert werden, dann werden sie ja nicht gespeichert. Wenn Sie mit "neustart" meinen, dass Sie zum Hauptmenü zurückkehren (wie Ihre Frage anzeigt), dann müssen Sie nichts speichern. –

+2

Ja ich meine Neustart wie in der Person ist immer noch im Programm, aber es kehrt zurück zum Hauptmenü. Jedes Mal, wenn das Programm zum Anfang zurückspringt, wie macht man es so, dass die Daten, die sie eingegeben haben, jetzt im Wörterbuch sind, als es zum ersten Mal nicht da war. Ich habe den Code auch hinzugefügt – d8595

Verwandte Themen