Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import json | |
| import random | |
| import matplotlib.pyplot as plt | |
| # ---- Karteikasten-Logik (Leitner-System) ---- | |
| DATEI = "karteikarten.json" | |
| def lade_karteikarten(): | |
| with open(DATEI, "r", encoding="utf-8") as f: | |
| return json.load(f) | |
| def speichere_karteikarten(karten): | |
| with open(DATEI, "w", encoding="utf-8") as f: | |
| json.dump(karten, f, indent=2, ensure_ascii=False) | |
| def naechste_karte(karten): | |
| gewichtet = [] | |
| for karte in karten: | |
| gewicht = 6 - karte["stufe"] | |
| gewichtet += [karte] * gewicht | |
| return random.choice(gewichtet) if gewichtet else None | |
| def verarbeite_antwort(karte, antwort_index, alle_karten): | |
| korrekt = (antwort_index == karte["richtig"]) | |
| if korrekt: | |
| karte["stufe"] = min(karte["stufe"] + 1, 5) | |
| else: | |
| karte["stufe"] = 1 | |
| speichere_karteikarten(alle_karten) | |
| return korrekt, karte["stufe"] | |
| def erstelle_fortschrittsgrafik(karten): | |
| stufen = [1, 2, 3, 4, 5] | |
| anzahl_karten = [sum(1 for k in karten if k["stufe"] == s) for s in stufen] | |
| plt.figure(figsize=(8, 5)) | |
| plt.bar(stufen, anzahl_karten) | |
| plt.xlabel("Lernstufe") | |
| plt.ylabel("Anzahl Karteikarten") | |
| plt.title("Karteikarten-Fortschritt") | |
| plt.xticks(stufen) | |
| plt.grid(axis="y") | |
| pfad = "karteikasten_fortschritt.png" | |
| plt.savefig(pfad) | |
| plt.close() | |
| return pfad | |
| # ---- Gradio-App ---- | |
| karten = lade_karteikarten() | |
| aktuelle_karte = naechste_karte(karten) | |
| def quiz(antwort_index): | |
| global aktuelle_karte, karten | |
| if aktuelle_karte is None: | |
| return "Alle Karten gelernt!", "", [] | |
| korrekt, neue_stufe = verarbeite_antwort(aktuelle_karte, antwort_index, karten) | |
| text = "✅ Richtig!" if korrekt else "❌ Leider falsch." | |
| feedback = f"{text} Diese Karte ist jetzt in Stufe {neue_stufe}." | |
| aktuelle_karte = naechste_karte(karten) | |
| if aktuelle_karte: | |
| return feedback, aktuelle_karte["frage"], aktuelle_karte["antworten"] | |
| else: | |
| return "Du hast alle Karten durch!", "", [] | |
| def zeige_fortschritt(): | |
| pfad = erstelle_fortschrittsgrafik(karten) | |
| return pfad | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 📚 Karteikarten-Lernen – §34a Leitner-System") | |
| frage = gr.Textbox(label="Frage", value=aktuelle_karte["frage"] if aktuelle_karte else "", interactive=False) | |
| feedback = gr.Textbox(label="Feedback", interactive=False) | |
| btns = gr.Radio(aktuelle_karte["antworten"] if aktuelle_karte else [], label="Antwort wählen") | |
| weiter = gr.Button("Antwort prüfen") | |
| weiter.click(fn=quiz, inputs=btns, outputs=[feedback, frage, btns]) | |
| gr.Markdown("## 📊 Fortschritt") | |
| zeige_btn = gr.Button("Fortschritt anzeigen") | |
| fortschritt_img = gr.Image() | |
| zeige_btn.click(fn=zeige_fortschritt, inputs=None, outputs=fortschritt_img) | |
| demo.launch() | |