Wörterbuch Python Wort erkennen

Neue Frage »

Auf diesen Beitrag antworten »
Dr.Java Wörterbuch Python Wort erkennen

Hallo. Ich hätte da noch eine Frage ,ich fürchte zwar das das ganze Problem recht banal ist,aber ich habe jetzt stunden daran rumprobiert ohne Erfolg und frag deshalb einfach mal hier nach.

Also zunächst sollte man eine Datei mit dem Namen "woerterbuch.txt" anlegen.
Der Inhalt der Datei ist eine Auflistung von Englisch-Deutschen Namen für Länder.

Zitat:

Spain Spanien
Germany Deutschland
Sweden Schweden
France Frankreich
Italy Italien


Ich habe das ganze als Textdokument geschrieben und im Pythonordner unter dem Namen " woerterbuch"gespeichert.

In einer Pythondatei habe ich dann entsprechend folgendes geschrieben.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
woerter = {}

fobj=open("woerterbuch.txt", "r")
for line in fobj:
    line = line.strip()
    zuordnung = line.split(" ")
    woerter[zuordnung[0]] = zuordnung[1]
    fobj.close()
    
    while True:
        wort = input("Geben Sie ein Wort ein: ")
        if wort in woerter:
            print("Das deutsche Wort lautet:", woerter[wort])
        else:
            print("Das Wort ist unbekannt")


Dann habe ich das ganze in der Shell importiert ,es war zunächst auch alles richtig,bis es zu Ungereimtheiten kam . Es sollte so eigentlich so aussehen :

code:
1:
2:
3:
4:
5:
6:
7:
8:
Geben Sie ein Wort ein: Germany
Das deutsche Wort lautet: Deutschland
Geben Sie ein Wort ein Italy:
Das deutsche Wort lautet Italien
Geben Sie ein Wort ein: Greece
Das Wort ist unbekannt


Ich musste dann aber feststellen das ich das Programm zu laufen bringen und auch was eingeben kann, er aber nur immer die obersten Namen lesen konnte. Wenn ich also Spain Spanien oben hatte,in der Datei, konnte er das übersetzen ,den Rest erkannte er nicht,wenn ich Deutschland Germany ganz oben in der "woerterbuch.txt "Datei einsetzte konnte er nur das lesen. Das sah dann so aus :

code:
1:
2:
3:
4:
5:
6:
7:
8:
Geben Sie ein Wort ein: Spain
Das deutsche Wort lautet: Spanien
Geben Sie ein Wort ein Italy:
Das Wort ist unbekannt
Geben Sie ein Wort ein: Germany
Das Wort ist unbekannt


Ich habe schon die Dateien mehrmals neu geschrieben ,den Shell neugestartet ,verschiedene Namen probiert und den Text im Dokument herumgeschoben ,es ergab sich immer das selbe Problem oder ist gar nicht mehr gestartet.

Könnte mir vielleicht jemand sagen wo mein (Denk-)Fehler ist? Danke schon mal dafür.

lg
 
Auf diesen Beitrag antworten »
eulerscheZahl

Es ist die Einrückung
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
woerter = {}

fobj=open("woerterbuch.txt", "r")
for line in fobj:
	zuordnung = line.strip().split(" ")
	woerter[zuordnung[0]] = zuordnung[1]
fobj.close() #erst zumachen, wenn alles eingelesen ist

while True:
	wort = input("Geben Sie ein Wort ein: ")
	if wort in woerter:
		print("Das deutsche Wort lautet:", woerter[wort])
	else:
		print("Das Wort ist unbekannt")
Auf diesen Beitrag antworten »
Dr.Java

Tatsächlich? Schon wieder, ich dachte eigentlich den Code ausführlich untersucht und extra auf die Einrückung geachtet zu haben. Danke für die Antwort,auf jeden Fall.
Aber es scheint immer noch nicht zu funktionieren. Ich habe mal deine Version der Datei übernommen und das ganze versucht in der Shell zu importieren, es kam aber nur eine Fehlermeldung.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
import woerterbuch

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    import woerterbuch
  File "C:\Users\Name\AppData\Local\Programs\Python\Python35-32\woerterbuch.py", line 6, in <module>
    woerter[zuordnung[0]] = zuordnung[1]
IndexError: list index out of range


lg
Auf diesen Beitrag antworten »
eulerscheZahl

Hast du eine leere Zeile am Ende des Wörterbuchs?
Dann gibt es beim split auch keine 2 Wörter.
 
Auf diesen Beitrag antworten »
Dr.Java

Mit Wörterbuch meinst du die Textdatei nehme ich an?
Also ich habe da einfach im Textdokument direkt in der ersten Zeile Spain Spanien stehen,mit einer Leertaste Abstand,dann direkt darunter das nächste,usw.
Aber ansonsten ist das Dokument leer. Meintest du das in etwa mit leerer Zeile?

lg
Auf diesen Beitrag antworten »
eulerscheZahl

Ich wette, das Wörterbuch sieht so aus:
code:
1:
2:
3:
4:
5:
6:
Spain Spanien
Germany Deutschland
Sweden Schweden
France Frankreich
Italy Italien

Man beachte Zeile 6.

Lösche die Zeile oder fixe den Code:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
woerter = {}

fobj=open("woerterbuch.txt", "r")
for line in fobj:
	zuordnung = line.strip().split(" ")
	if len(zuordnung) == 2:
		woerter[zuordnung[0]] = zuordnung[1]
fobj.close() #erst zumachen, wenn alles eingelesen ist

while True:
	wort = input("Geben Sie ein Wort ein: ")
	if wort in woerter:
		print("Das deutsche Wort lautet:", woerter[wort])
	else:
		print("Das Wort ist unbekannt")
Auf diesen Beitrag antworten »
Dr.Java

Ah mit dem neuen Code klappt es einwandfrei,danke dir.
Aber ein paar Fragen hätte ich noch.
Zitat:
Lösche die Zeile [...]

Ja,ich glaube meine Datei sieht genauso aus,aber mal blöd gefragt,wie lösche ich denn in einem Textdokument die leere Zeile? Und was genau hast du gemacht damit das Programm funktioniert?Ich meine ich hab gesehen das du " if len(zuordnung) == 2:" ergänzt hast, aber warum ,wie funktioniert das?

lg
Auf diesen Beitrag antworten »
eulerscheZahl

Die Leerzeile kannst du löschen, indem du in der Zeile darüber ans Ende gehst und die ENTF Taste drückst. Wenn das nicht geht, such dir einen besseren Editor.

Die leere Zeile enthält kein Leerzeichen. Deshalb entsteht beim Split auch eine Liste mit Länge 1.
Der Code greift aber auf den 2. Eintrag zu. Daher auch der Fehler.
Also liegt es nahe zu prüfen, ob es auch wirklich 2 Einträge gibt. Das mache ich mit len == 2.
Auf diesen Beitrag antworten »
Dr.Java

Ach so ,jetzt funktioniert das auch ohne die if Zeile. Vielen Dank nochmal für deine Hilfe.

lg
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »