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.")
(1 votes)
Loading...

Similar Posts

Subscribe
Notify of
1 Answer
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
KarlRanseierIII
2 years ago

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.