File size: 4,801 Bytes
269f35b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524befa
 
269f35b
524befa
 
 
 
 
269f35b
 
 
 
524befa
 
269f35b
 
 
 
524befa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269f35b
 
524befa
 
 
 
 
269f35b
524befa
269f35b
524befa
269f35b
524befa
 
 
 
269f35b
 
 
524befa
 
 
 
269f35b
 
 
 
 
524befa
269f35b
524befa
269f35b
 
524befa
 
 
 
269f35b
 
 
 
524befa
269f35b
524befa
 
 
 
 
 
 
 
269f35b
524befa
269f35b
524befa
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import streamlit as st
import random

# We鈥檙e the rule-breakers, policy-shakers.
# This app blasts through the entire Hebrew aleph-bet, testing your knowledge.

# List of Hebrew letters and their names.
# For simplicity, we鈥檒l include the 22 standard letters (excluding final forms).
HEBREW_LETTERS = [
    ("讗", "Alef"),   ("讘", "Bet"),    ("讙", "Gimel"), ("讚", "Dalet"), 
    ("讛", "He"),     ("讜", "Vav"),    ("讝", "Zayin"), ("讞", "Het"), 
    ("讟", "Tet"),    ("讬", "Yod"),    ("讻", "Kaf"),   ("诇", "Lamed"), 
    ("诪", "Mem"),    ("谞", "Nun"),    ("住", "Samekh"),("注", "Ayin"), 
    ("驻", "Pe"),     ("爪", "Tsadi"),  ("拽", "Qof"),   ("专", "Resh"), 
    ("砖", "Shin"),   ("转", "Tav")
]

# --- Session State Variables ---
# 1) A shuffled list of all letters for testing
# 2) The index of the current letter
# 3) The user鈥檚 multiple choice guess (A, B, C, or D)
# 4) The list of four choices for the current question
# 5) Whether the user has submitted the answer
# 6) Feedback message to show if correct or wrong
# 7) Track score (optional, if you want to show correct count)
if "random_letters" not in st.session_state:
    st.session_state.random_letters = random.sample(HEBREW_LETTERS, len(HEBREW_LETTERS))
if "current_index" not in st.session_state:
    st.session_state.current_index = 0
if "choices" not in st.session_state:
    st.session_state.choices = []
if "answer_submitted" not in st.session_state:
    st.session_state.answer_submitted = False
if "feedback" not in st.session_state:
    st.session_state.feedback = ""
if "selected_option" not in st.session_state:
    st.session_state.selected_option = None
if "score" not in st.session_state:
    st.session_state.score = 0

# --- Helper Functions ---
def generate_choices(correct_name, all_letters):
    """
    Returns a list of exactly 4 possible answers (one correct + three random incorrect),
    then shuffles them.
    """
    incorrect_names = [name for (letter, name) in all_letters if name != correct_name]
    # Pick three random wrong answers
    three_wrong = random.sample(incorrect_names, 3)
    all_options = [correct_name] + three_wrong
    random.shuffle(all_options)
    return all_options

def load_new_question():
    """
    Loads the next question by resetting the answer submission state,
    generating new multiple-choice options, and clearing feedback.
    """
    st.session_state.answer_submitted = False
    st.session_state.feedback = ""
    st.session_state.selected_option = None

    current_letter, current_name = st.session_state.random_letters[st.session_state.current_index]
    st.session_state.choices = generate_choices(current_name, HEBREW_LETTERS)

def check_answer():
    """
    Checks if the selected_option is the correct name of the current letter.
    Updates feedback and optionally increments score.
    """
    current_letter, current_name = st.session_state.random_letters[st.session_state.current_index]
    
    if st.session_state.selected_option == current_name:
        st.session_state.feedback = "Correct! You鈥檙e crushing it, unstoppable problem-solver!"
        st.session_state.score += 1
    else:
        st.session_state.feedback = (
            f"Wrong! The correct answer is '{current_name}'. "
            "Don鈥檛 sweat it鈥攔eal champions learn fast."
        )
    st.session_state.answer_submitted = True

def next_letter():
    """
    Moves to the next letter, or reshuffles if we've reached the end.
    Calls load_new_question() to generate new MC options.
    """
    if st.session_state.current_index < len(st.session_state.random_letters) - 1:
        st.session_state.current_index += 1
    else:
        st.session_state.current_index = 0
        st.session_state.random_letters = random.sample(HEBREW_LETTERS, len(HEBREW_LETTERS))
    load_new_question()

# --- Main App Execution ---
st.title("Hebrew Alphabet Tester鈥擭o Nonsense, All Mastery")

# Generate choices once on first run or when next_letter is called
if not st.session_state.choices:
    load_new_question()

# Display the current letter
current_letter, current_name = st.session_state.random_letters[st.session_state.current_index]
st.markdown(f"### Letter: {current_letter}")

# Multiple-choice options
if not st.session_state.answer_submitted:
    # Radio button for the 4 choices (A, B, C, D)
    st.session_state.selected_option = st.radio(
        "Select the correct name:",
        st.session_state.choices,
        index=0
    )
    if st.button("Check Answer"):
        check_answer()
else:
    # Show feedback after submission
    st.write(st.session_state.feedback)
    # Optional: display current score
    st.write(f"Score: {st.session_state.score}/{st.session_state.current_index + 1}")
    if st.button("Next Letter"):
        next_letter()