File size: 2,825 Bytes
2ef45b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

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()