import sys import os import json import random ################## # Daten einlesen # ################## def dateinamen_bestimmen(): 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 return datei def scores_hinzufuegen(voci): for paar in voci: if not "s" in paar: # Gibt es den Schlüssel s bereits? Falls nein, hinzufügen. paar["s"] = 0 def daten_einlesen(): # Datei bestimmen (default oder von der Kommandozeile) dateinamen = dateinamen_bestimmen() # Daten einlesen with open(dateinamen, "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 scores_hinzufuegen(voci) return voci, dateinamen ########## # Lernen # ########## def hole_eingabe(paar, anzahlfehler): # Wort auf Deutsch anzeigen print(f"Übersetze: {paar['d']} (score {paar['s']})") if anzahlfehler>2: print(f" Hinweis: {paar['f']}") # Eingabe vom Benutzer return sys.stdin.readline().strip() def wort_korrekt(eingabe, paar, anzahlfehler): if eingabe != paar['f']: return False # Funktion sofort beenden # Eingabe ist korrekt if anzahlfehler>1: paar['s'] -= 1 if (paar['s']<0): paar['s']=0 return True paar['s'] += 2 - anzahlfehler return True def wort_abfragen(paar): anzahlfehler = 0 while True: # Endlos Schleife eingabe = hole_eingabe(paar, anzahlfehler) if eingabe=="x": return True # Programmabbruch if wort_korrekt(eingabe, paar, anzahlfehler): return False # Wort korrekt, aber Programm nicht beenden anzahlfehler = anzahlfehler + 1 def wort_bestimmen(voci): voci.sort(key = lambda eintrag: eintrag['s']+random.random()) # Aktuelles paar ist das erste in der Liste return voci[0] def abfragen(voci): while True: # Endlosschleife paar = wort_bestimmen(voci) programmAbbruch = wort_abfragen(paar) if programmAbbruch: return def daten_speichern(voci, dateinamen): with open(dateinamen, "w") as f: # Datei zum Schreiben (write) öffnen f.write(json.dumps(voci, indent=2)) # Daten in Datei schreiben f.write("\n") voci, dateiname = daten_einlesen() abfragen(voci) daten_speichern(voci, dateiname)