Py.Cafe

jbwhit/

lithuanian-age

Lithuanian Language Exercise App

DocsPricing
  • app.py
  • requirements.txt
app.py
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
import solara
import pandas as pd
from io import StringIO

# Load the data from CSV files
pronouns_df = pd.read_csv("pronouns.csv")
numbers_df = pd.read_csv("numbers.csv")

# Function to get a random nominative pronoun and a number
def get_random_exercise():
    nominative_pronoun = pronouns_df.sample(1).iloc[0]
    number_row = numbers_df.sample(1).iloc[0]
    return nominative_pronoun, number_row

# Function to fetch the dative and compound year
def get_answer(nominative_pronoun, number_row):
    dative = pronouns_df.loc[pronouns_df['nominative'] == nominative_pronoun['nominative'], 'dative'].values[0]
    year_phrase = f"{number_row['neoficialiai']} {number_row['compound']} {number_row['years']}" if pd.notna(number_row['compound']) else f"{number_row['neoficialiai']} {number_row['years']}"
    return f"{dative.title()} {year_phrase}."


@solara.component
def AnswerHistory(answers):
    with solara.Card():
        solara.Markdown("### History of Answers")
        for exercise, answer, correct in answers:
            result_text = "Correct" if correct else "Incorrect"
            solara.Markdown(f"- {exercise} -> {answer} ({result_text})")

@solara.component
def ProgressTracker(answers):
    total_exercises = len(answers)
    correct_answers = sum(1 for _, _, correct in answers if correct)
    incorrect_answers = total_exercises - correct_answers
    accuracy = (correct_answers / total_exercises) * 100 if total_exercises > 0 else 0

    with solara.Card():
        solara.Markdown("### Progress")
        solara.Markdown(f"Total Exercises: {total_exercises}")
        solara.Markdown(f"Correct Answers: {correct_answers}")
        solara.Markdown(f"Incorrect Answers: {incorrect_answers}")
        solara.Markdown(f"Accuracy: {accuracy:.2f}%")

        # with solara.ProgressLinear(value=accuracy, color="blue"):
        #     pass

@solara.component
def Page():
    nominative_pronoun, set_nominative_pronoun = solara.use_state(None)
    number_row, set_number_row = solara.use_state(None)
    show_answer, set_show_answer = solara.use_state(False)
    answers, set_answers = solara.use_state([])

    if nominative_pronoun is None or number_row is None:
        nominative_pronoun, number_row = get_random_exercise()
        set_nominative_pronoun(nominative_pronoun)
        set_number_row(number_row)

    exercise_text = f"{nominative_pronoun['nominative']}, {number_row['number']}"
    answer_text = get_answer(nominative_pronoun, number_row)

    with solara.Column(gap="20px"):
        with solara.Card():
            solara.Markdown(f"""### Exercise: Kiek tau metų?
({exercise_text})""")

            if solara.Button("Reveal Answer", on_click=lambda: set_show_answer(True)):
                if show_answer:
                    solara.Markdown(f"**Answer:** {answer_text}")
                    with solara.Row(gap="10px"):
                        solara.Button("Correct", on_click=lambda: set_answers(answers + [(exercise_text, answer_text, True)]), color='green')
                        solara.Button("Incorrect", on_click=lambda: set_answers(answers + [(exercise_text, answer_text, False)]), color='red')

                    with solara.Row(gap="10px"):
                        solara.Button("Next Question", on_click=lambda: (
                            set_nominative_pronoun(None),
                            set_number_row(None),
                            set_show_answer(False)
                        ))

        ProgressTracker(answers)
        AnswerHistory(answers)