numzoo / math_engine.py
goumsss's picture
Rename to LoveMath + major UX improvements
53940d1
Raw
History Blame
1.62 kB
import random
# Levels definition
# Targeting ages 9-10
def generate_question(level: int) -> tuple[str, int]:
"""
Returns (question_string, correct_answer) for the given level.
Levels:
1 - Addition (numbers 1-30)
2 - Subtraction (result always positive, numbers 1-30)
3 - Multiplication tables (2 to 9)
4 - Mixed bag (all of the above)
"""
if level == 1:
a = random.randint(1, 30)
b = random.randint(1, 30)
return f"{a} + {b}", a + b
elif level == 2:
a = random.randint(1, 30)
b = random.randint(1, a)
return f"{a} - {b}", a - b
elif level == 3:
a = random.randint(2, 9)
b = random.randint(2, 9)
return f"{a} Γ— {b}", a * b
else: # level 4 β€” mixed
op = random.choice(["add", "sub", "mul"])
if op == "add":
a = random.randint(10, 50)
b = random.randint(10, 50)
return f"{a} + {b}", a + b
elif op == "sub":
a = random.randint(10, 50)
b = random.randint(1, a)
return f"{a} - {b}", a - b
else:
a = random.randint(2, 12)
b = random.randint(2, 12)
return f"{a} Γ— {b}", a * b
LEVEL_NAMES = {
1: "βž• Additions",
2: "βž– Subtractions",
3: "βœ–οΈ Multiplications",
4: "🎲 Mix",
}
LEVEL_THRESHOLDS = {1: 5, 2: 5, 3: 5, 4: 999}
def level_up_message(level: int) -> str:
messages = {
2: "πŸŽ‰ Next level!",
3: "🌟 Multiplications!",
4: "πŸ† Expert mode!",
}
return messages.get(level, "")