Spaces:
Sleeping
Sleeping
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()
|