import sys import os import json import random ################## # Daten einlesen # ################## # Datei bestimmen (default oder von der Kommandozeile) datei = "voci.json" if len(sys.argv)>1: # Falls es ein zusätzliches Kommandozeilenargument gibt datei = sys.argv[1] print(f"Versuche Daten aus der Datei {datei} einzulesen") if not os.path.exists(datei): # Falls die Datei nicht existiert, abbrechen print(f"Sorry, die Datei {datei} existiert nicht!") exit(-1) # Abbruch mit Fehler # Daten einlesen with open(datei, "r") as f: # Datei zum Lesen (read) öffnen voci = json.loads(f.read()) # Inhalt lesen, interpretieren und in die Variable voci speichern. # Scores hinzufügen, falls nötig for paar in voci: if not "s" in paar: # Gibt es den Schlüssel s bereits? Falls nein, hinzufügen. paar["s"] = 0 ########## # Lernen # ########## # Wiederholen, bis der Benutzer abbricht programmEnde = False print("Hinweis: Durch Eingabe von 'x' kann das Programm beendet werden.") while not programmEnde: # Endlos-Schleife # Wörter Sortieren: voci = sorted(voci, key = lambda eintrag: eintrag['s']+random.random()) # Aktuelles paar ist das erste in der Liste paar = voci[0] # Abfrage vorbereiten ok = False # Benutzer hat noch nicht richtig geantwortet anzahlfehler = 0 while not ok: # Wiederholen, bis der Benutzer richtig geantwortet hat. # Wort auf Deutsch anzeigen print(f"Übersetze: {paar['d']} (score {paar['s']})") if anzahlfehler>2: print(f" Hinweis: {paar['f']}") # Eingabe vom Benutzer eingabe = sys.stdin.readline().strip() if eingabe=="x": programmEnde = True break # innere while-Schlaufe verlassen if eingabe==paar['f']: # gleich dem Fremdwort? ok = True if anzahlfehler==0: paar['s']+=2 elif anzahlfehler==1: paar['s']+=1 else: paar['s'] -= 1 if (paar['s']<0): paar['s']=0 else: anzahlfehler = anzahlfehler + 1 # Daten speichern: with open(datei, "w") as f: # Datei zum Schreiben (write) öffnen f.write(json.dumps(voci, indent=2)) # Daten in Datei schreiben f.write("\n")