2016-06-04 17 views
3

Ich habe an dieser Aufgabe für eine Weile gearbeitet, die Aufgabe ist es, eine Funktion zu schreiben, die einen Text in Englisch auf Schwedisch übersetzt. Ich habe eine Dicitonary mit Schlüssel & Wert erstellt, wobei Schlüssel das englische Wort und Wert das schwedische Wort ist.Python-Funktion gibt leere Liste zurück

WIE ICH DENKEN WURDE: Ich dachte daran, dass es 2 für Schleifen geben sollte. Zuerst sollte man durch Schlüssel und Werte im Wörterbuch iterieren, und der zweite sollte durch den String iterieren, danach sollte es eine Bedingung geben, wo geprüft wird, ob der Schlüssel im Wörterbuch gleich dem Wort in der Zeichenkette ist. Falls ja, hängen Sie den Wert des Schlüssels an die Liste an.

DAS PROBLEM: Die Funktion gibt eine leere Liste zurück.

hier mein CODE:

def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
    translated = [] 
    for k, v in trs.iteritems(): 
     for i in a.split(" "): 
      if trs[k] == i: 
       translated.append(trs[v]) 
    return translated 

print translate("merry christmas and happy new year") 
+2

In Ihrer Schleife haben Sie bereits 'k' als Schlüssel aus' trs' und 'v' als Wert. Warum steckst du sie wieder in 'trs' als Schlüssel, wie' trs [k] 'und' trs [v] '? –

+0

"Wenn Schlüssel im Wörterbuch gleich dem Wort in der Zeichenfolge ist" Nun, nein, Sie überprüfen es gegen 'Trs [k]' was ist der ** Wert **, müssten Sie überprüfen, wenn i == k um es gegen den Schlüssel zu überprüfen. –

+0

was meinst du, indem du sie zurück in trs legst? Ich will, dass es den Wert in die Liste 'übersetzt' anfügt, wenn der Schlüssel in trs dictionary ist gleich mit dem Wort in string (i) –

Antwort

4

Es gibt mehrere Probleme mit Ihrem Code.

Die erste ist, dass Sie über den Schlüssel-Wert-Paare im Wörterbuch durchlaufen, und versuchen Sie es später die Werte als Schlüssel hier zu verwenden: if trs[k] == i: und hier translated.append(trs[v]) sollte nur k und v statt trs[k] und trs[v] Diese sein.

Das zweite Problem ist ein größeres Problem: nach der Festlegung der vorherigen, gibt der Code immer noch falsche Antwort. Die Wörter sind in zufälliger Reihenfolge. Dies liegt daran, dass Sie anstelle der Wörter selbst über die Wörterbuchelemente in der äußeren Schleife iterieren. Dies kann leicht durch Ändern der Reihenfolge der Schleifen behoben werden.

Die dritte ist, dass ich denke, dass die Funktion eine Zeichenfolge zurückgeben sollte. Gib am Ende einfach " ".join(translated) zurück.

Und das vierte ist, dass Sie das Wörterbuch tatsächlich nicht als Wörterbuch verwenden. Sie verwenden es als Liste, aber es ist nicht so, wie sie verwendet werden sollen. dict s sind direkte Zuordnungen von Werten, Sie müssen nicht ständig über alle Einträge hinweg iterieren. Verwenden Sie die Operatoren in und [].

Also hier ist, wie dieser Code sollte wie folgt aussehen:

def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ar"} 
    translated = [] 
    for i in a.split(" "): 
     if i in trs: 
     translated.append(trs[i]) 
    return " ".join(translated) 

print translate("merry christmas and happy new year") 
# prints "god jul och gott nytt ar" 
+0

Vielen Dank, dass Sie es erklärt haben und mich wissen lassen, was ich falsch gemacht habe: D Ich habe etwas Neues gelernt. Nochmals vielen Dank –

2

Ich denke, das ist das, was Sie suchen:

trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
translated = [] 
for i in a.split(" "): # loop over sentence and try to translate every word 
    if i in trs: # the word to be translated is a key in your dict 
     translated.append(trs[i]) # add the translation if present 
    # else 
    # translated.append(i) 
return ' '.join(translated) # makes more sense than returning a list 
+0

Hmm? Warum genau fragst du das? – schwobaseggl

+0

weil der Code falsch ist –

+0

Sie haben es versucht, Bruder? – schwobaseggl

1
def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ar"} 
    translated = [] 
    for i in a.split(" "): 
     for k, v in trs.iteritems(): 
      if i == k: 
       translated.append(trs[i]) 
    return translated 

print translate("merry christmas and happy new year") 

# output: 
# ['god', 'jul', 'och', 'gott', 'nytt', 'ar'] 
3
  • Sie wollen Wortfolge in der Übersetzung erhalten, was bedeutet, dass Iteration über die ursprünglichen Worte sollten den Algorithmus (nicht Iteration über fahren Ihr Übersetzung Wörterbuch).

  • Es ist nicht notwendig, das Wörterbuch zu durchlaufen: Der Zweck einer Schlüssel/Wert-Datenstruktur besteht darin, dass Sie einzelne Elemente schnell nach Schlüssel abrufen können.

  • Wörterbücher haben eine get() Methode, die in Fällen nützlich ist, in denen ein Schlüssel existiert oder nicht.

  • Nur Raten, aber es scheint, als ob die Methode Text anstelle einer Liste übersetzter Wörter zurückgeben sollte (entsprechend anpassen).

  • So ist es läuft alles auf diese nach unten:

    return ' '.join(trs.get(w, w) for w in orig_text.split()) 
    
0
def translate(a): 
    trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"} 
    translated = [] 
    for i in a.split(" "): 
     for k, v in trs.iteritems(): 
      if k == i: 
       translated.append(trs[k]) 
return translated 

print translate("merry christmas and happy new year)

In Line 6, Sie tun trs [k], die bei trs Wert zurückgeben wwill [k ], die keiner der Teilzeichenfolgen entspricht. Deshalb bekommst du eine leere Liste.

Verwandte Themen