Python Pickle Vokabeltrainer?
Hallo,
ich will einen simplen Vokabeltrainer mit python programmieren. Um die Vokabeln die vom user eingeben werden zu speichern verwende ich pickle. Leider werden ohne Fehlermeldung keine Vokabeln in der von mir angelegten Datei gespeichert.
import random
import pickle
class Entry:
def __init__(self, deutsch, englisch):
self.deutsch = deutsch
self.englisch = englisch
def toString(self):
return self.deutsch + " - " + self.englisch
eintraege = [Entry("hallo", "hello")]
def save():
with open('vocabulary.pkl', 'wb') as voc_pkl:
pickle.dump(eintraege, voc_pkl)
save()
with open('vocabulary.pkl', 'rb') as voc_pkl:
eintraege = pickle.load(voc_pkl)
def eingabe():
while True:
deutsch = input("Deutsches Wort: ")
if deutsch == "#fertig":
return
englisch = input("Englisches Wort: ")
if englisch == "#fertig":
return
eintraege.append(Entry(deutsch, englisch))
save()
def abfrage():
while True:
i = random.randint(0,len(eintraege)-1)
englisch = input("Englische Übersetzung von " + eintraege[i].deutsch + ": ")
if(englisch == "#fertig"):
return
if eintraege[i].englisch == englisch:
print("korrekt!")
else:
print("leider falsch. Richtige Antwort: " + eintraege[i].englisch)
def printall():
for eintrag in eintraege:
print(eintrag.toString())
while True:
befehl = input("Befehl: ")
if befehl == "eingabe":
eingabe()
elif befehl == "abfrage":
abfrage()
elif befehl == "beenden":
break
elif befehl == "ausgabe":
printall()
else:
print("keine bekannte Ausgabe. Tippe: eingabe, abfrage, ausgabe oder beenden.")
Also, wenn ich das Skript starte und direkt wieder beende enthält die Datei vocabulary.pkl den erwarteten inhalt.
Nur rufst Du jedesmal beim start save() auf und schreibst damit die Liste mit dem einen Paar direkt raus.