Das `toString` sieht so aus, als ob Du versuchst, mit einem Java-Buch Python zu lernen. Methoden schreibt man wie Variablen komplett klein. Zudem gibt es eine spezielle Methode __str__, die man üblicherweise implementiert, wenn ein Objekt in einen String umwandeln werden soll.
Die spezielle Behandlung von `deutsch is None` sieht komisch aus.
Statt Strings mit + zusammenzustückeln benutzt man Formatstrings.
`eintraege` ist eine globale Variable, die nicht existieren sollte, alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Es ist auch komisch, dass da immer Fix ein Eintrag schon drinsteht, der dann durch weitere aus einer Datei Vokabeltrainer.txt ergänzt wird.
Dateien öffnet man innerhalb eines with-Statements und bei Textdateien gibt man immer auch ein Encoding an. Die Funktion `testen` ist überflüssig, da darin ja nur dateispeichern aufgerufen wird.
`dateispeichern` hängt immer wieder die selben Einträge an, die es kurz zuvor aus der selben Datei gelesen hat. Die Datei wächst also expotentiell.
`i` ist ein sehr schlechter Name für etwas, das in `eintraege` steht. `eintraege` ist eigentlich auch schon zu generisch, weil es sich ja offensichtlich um Vokabeln handelt.
Code: Alles auswählen
VOKABEL_DATEINAME = "Vokabeltrainer.txt"
class Vokabel:
def __init__(self, deutsch, englisch):
self.deutsch = deutsch
self.englisch = englisch
def __str__(self):
if self.deutsch is None:
return "Ende - End"
return f"{self.deutsch} - {self.englisch}"
def vokabeln_schreiben(vokabeln):
with open(VOKABEL_DATEINAME, "w", encoding="utf8") as file:
for vokabel in vokabeln:
print(vokabeln)
file.write("{vokabeln}\n")
def vokabeln_lesen():
vokabeln = []
with open(VOKABEL_DATEINAME, encoding="utf8") as file:
for zeile in file:
vokabeln.append(str(zeile.split(" - ")))
return vokabeln
def main():
vokabeln = vokabeln_lesen()
for vokabel in vokabeln:
print(vokabel)
vokabeln_schreiben(vokabeln)
print("Fertig")
if __name__ == "__main__":
main()
Jetzt zum eigentlichen Problem, der Zeile
Hier passieren sehr viele Dinge auf einmal, aber nicht das richtige.
Erst wird der String zeile an " - " getrennt, so dass Du eine Liste erhältst. Diese Liste wandelst Du in ihre Stringrepräsentation um (was außer für Debuggingzwecke nie sinnvoll ist) und steckst den String in die Vokabeln-Liste.
Die Vokabeln-Liste soll aber Objekte vom Typ Vokabel enthalten, im gesamten Code erzeugst Du aber nie solche Objekte. Deine Aufgabe ist es also noch, aus einem String der Form "Hallo - Hello\n" ein Objekt der Form Vokabel("Hallo", "Hello") zu machen.