2016-04-21 3 views
-1

Problem Ich habe versucht, Benutzereingabe als Schlüssel in einem Wörterbuch zuzuweisen. Wenn die Benutzereingabe ein Schlüssel ist, dann drucke ihren Wert aus, andernfalls drucke einen ungültigen Schlüssel. Das Problem sind die Tasten und die Werte stammen aus einer Textdatei. Der Einfachheit halber werde ich nur zufällige Daten für den Text verwenden. Jede Hilfe wäre willkommen.Python: Zuweisen von Benutzereingaben als Schlüssel im Wörterbuch

datei.txt

Hund, Rinde
Katze, miauen
Vogel, zwitschern

-Code

def main(): 
    file = open("file.txt") 
    for i in file: 
     i = i.strip() 
     animal, sound = i.split(",") 
     dict = {animal : sound} 

    keyinput = input("Enter animal to know what it sounds like: ") 
    if keyinput in dict: 
     print("The ",keyinput,sound,"s") 
    else: 
     print("The animal is not in the list") 
+0

Was ist Ihre Frage? Du solltest [mcve] lesen. –

Antwort

6

Bei jeder Iteration der Schleife, Sie sind das Wörterbuch neu definieren, stattdessen neue Einträge hinzufügen:

d = {} 
for i in file: 
    i = i.strip() 
    animal, sound = i.split(",") 
    d[animal] = sound 

Dann Sie die Wörterbuchelemente durch Schlüssel zugreifen:

keyinput = input("Enter animal to know what it sounds like: ") 
if keyinput in d: 
    print("The {key} {value}s".format(key=keyinput, value=d[keyinput])) 
else: 
    print("The animal is not in the list") 

Bitte beachte, dass ich auch das Wörterbuch Variablennamen dict-d geändert haben, seit dict ist eine schlechte Variable Name Wahl, weil es shadowing die eingebaute dict ist.

Außerdem habe ich die Art, wie Sie die Berichtszeichenfolge erstellt haben, verbessert und stattdessen eine string formatting verwendet. Wenn Sie Dog eingeben würden, wäre die Ausgabe The Dog barks.


Sie können auch das Wörterbuch in einer Linie mit dem dict() Konstruktor initialisieren:

d = dict(line.strip().split(",") for line in file) 

Als Randbemerkung, to follow the best practices and keep your code portable and reliable, verwenden Sie die with context manager beim Öffnen der Datei - es dauern würde, kümmern uns um es zu schließen richtig:

2

OP, ich habe einige ausführliche Erläuterungen im Code geschrieben und ein paar Probleme behoben; Ich habe vielleicht etwas übersehen, aber schau es dir an.

  • Zum einen vermeiden dict als Variablennamen verwenden, da es Pythons Bult-in dict Methode Schatten.
  • Denken Sie daran, dass Sie in den meisten Fällen Variablen vor einer Schleife deklarieren müssen, um sie zugänglich zu machen nach die Schleife; Dies gilt für Ihr Wörterbuch.
  • Denken Sie auch daran Dateien nach dem Lesen/Schreiben zu schließen, wenn Sie with open(filename) ...

    def main(): 
        # declare a new, empty dictionary to hold your animal species and sounds. 
        # Note that I'm avoiding the use of "dict" as a variable name since it 
        # shadows/overrides the built-in method 
        animal_dict = {} 
        file = open("file.txt") 
        for i in file: 
         i = i.strip() 
         animal, sound = i.split(",") 
         animal_dict[animal] = sound 
    
        # Remember to close your files after reading 
        file.close() 
    
        keyinput = input("Enter animal to know what it sounds like: ") 
        if keyinput in animal_dict: 
    
         # here, keyinput is the string/key and to do a lookup 
         # in the dictionary, you use brackets. 
         # animal_dict[keyinput] thus returns the sound 
    
         print("The ",keyinput,animal_dict[keyinput],"s") 
        else: 
         print("The animal is not in the list") 
    
+0

Dumping-Code ohne Erklärung ist nicht hilfreich für OP oder zukünftige Leser. –

+0

@MorganThrapp Arbeiten daran ... :) – jDo

1

Dort Gebrauch waren Kommentare zu jeder Zeile ich etwas geändert zu erklären, was ich verändern, aber die Lesbarkeit zu helfen, ich bin setze sie auch hier hin.

  • On Line 2 instanziiert ein Wörterbuch - Sie waren zuvor Neudefinition ein Wörterbuch für jede Zeile
  • On Line 7 I Ihren Code geändert etwas zum Wörterbuch hinzuzufügen, statt nur ein Neues zu schaffen ein. Das ist richtige Wörterbuchsyntax.
  • Am 10. Linie änderte ich „wenn keyinput in dict“ auf „wenn in dict.keys() keyinput“, da Sie , wenn das Tier zu sehen, die Überprüfung besteht, und die Tiere in Ihrer Datei werden die Schlüssel des Wörterbuchs.

    def main(): 
    
        dict = {} #Create an empty dictionary to add to 
        file = open("file.txt") 
        for i in file: 
         i = i.strip() 
         animal, sound = i.split(",") 
         dict[animal] = sound #This is how you add a key/value pair to a dictionary in Python 
    
        keyinput = input("Enter animal to know what it sounds like: ") 
        if keyinput in dict.keys(): #Add .keys() to iterate through dictionary keys 
         print("The ",keyinput,sound,"s") 
        else: 
         print("The animal is not in the list") 
    
+1

@MorganThrapp Es gibt Kommentare zu jeder Zeile, die ich geändert habe, hast du das gesehen? Es war nicht nur ein Code-Dump. –

+0

@MorganThrapp Ich glaube nicht, dass Ian nur den Code verloren hat, bitte entferne deinen Downvote – haifzhan

1

Zunächst einmal sollten Sie nicht eine Variable, die die gleiche wie ein Schlüsselwort nennen. Zweitens überschreibt die Art, wie Sie die Eingabe in das Wörterbuch eingeben, die vorherigen Werte. Sie müssen das Wörterbuch erstellen und dann die neuen Werte hinzufügen. Drittens Sie die Ausgabe der Wert sound ohne es aus dem Wörterbuch zu bekommen

dict als eine Variable sollte mydict

mydict = {}vor der ersten Schleife

mydict[animal] = sound in der ersten Schleife gesetzt schaffen genannt werden

mydict['dog'] = 'bark' # This is what happens 

Drucken keyinput und mydict[keyinput] wenn es in der Liste ist.

Sie können anstelle des if auch mysound = mydict.get(keyinput, "not in dictionary") verwenden.

Why dict.get(key) instead of dict[key]?