brain-attack / app.py
Zainzahid786's picture
Update app.py
31b83d4 verified
import streamlit as st
import random
import time
# Function to generate math questions
def generate_questions(level, num_questions=5):
questions = []
for _ in range(num_questions):
num1 = random.randint(1, level * 10)
num2 = random.randint(1, level * 10)
operator = random.choice(['+', '-', '*', '//']) # Integer division
if operator == '//':
num1 = num1 * num2 # Ensure whole-number division
question = f"What is {num1} {operator} {num2}?"
answer = eval(f"{num1} {operator} {num2}")
questions.append((question, answer))
return questions
# Function to get background image
def get_background(level):
backgrounds = [
"https://example.com/background1.jpg",
"https://example.com/background2.jpg",
"https://example.com/background3.jpg",
]
return backgrounds[level % len(backgrounds)]
# Initialize session state
if 'level' not in st.session_state:
st.session_state.level = 1
if 'questions' not in st.session_state:
st.session_state.questions = generate_questions(st.session_state.level)
if 'score' not in st.session_state:
st.session_state.score = 0
if 'start_time' not in st.session_state:
st.session_state.start_time = time.time()
st.set_page_config(page_title="Math Quiz Game", layout="centered") # Mobile-friendly layout
st.title("๐Ÿงฎ Math Quiz Game")
st.markdown(f"### Level {st.session_state.level}")
# Display background
st.markdown(
f"""
<style>
.stApp {{
background-image: url('{get_background(st.session_state.level)}');
background-size: cover;
background-position: center;
}}
.block-container {{
padding: 1rem;
max-width: 100%;
}}
input {{
font-size: 18px;
padding: 8px;
}}
button {{
font-size: 20px;
padding: 10px;
}}
</style>
""",
unsafe_allow_html=True
)
# Retrieve stored questions
questions = st.session_state.questions
user_answers = []
for i, (question, answer) in enumerate(questions):
user_answer = st.text_input(question, key=f"q_{st.session_state.level}_{i}")
user_answers.append((user_answer, answer))
if st.button("โœ… Submit Answers"):
error_messages = []
level_score = 0
for i, (user_answer, answer) in enumerate(user_answers):
if not user_answer.strip():
error_messages.append(f"โŒ Question {i + 1}: Please enter an answer.")
else:
try:
if float(user_answer) == answer:
level_score += 1
else:
error_messages.append(f"โŒ Question {i + 1}: Incorrect! Correct answer is {answer}.")
except ValueError:
error_messages.append(f"โš ๏ธ Question {i + 1}: Invalid input. Please enter a number.")
if error_messages:
for msg in error_messages:
st.error(msg)
else:
elapsed_time = round(time.time() - st.session_state.start_time, 2)
st.success(f"๐ŸŽ‰ You scored {level_score} out of 5 in {elapsed_time} seconds!")
st.session_state.score += level_score
st.session_state.level += 1
st.session_state.questions = generate_questions(st.session_state.level)
st.session_state.start_time = time.time() # Reset timer
st.experimental_rerun()
# Show total score
st.sidebar.markdown(f"## Total Score: {st.session_state.score}")