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 - Additions (1–30) 2 - Subtractions (1–30, positive result) 3 - Multiplications (2×2 … 9×9) 4 - Mix (all of the above, up to 50) 5 - Hard Mix (2-digit additions/subtractions, 6×…12× tables) """ 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 elif level == 4: # Mix 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 else: # level 5+ — Hard Mix op = random.choice(["add", "sub", "mul"]) if op == "add": a = random.randint(10, 99) b = random.randint(10, 99) return f"{a} + {b}", a + b elif op == "sub": a = random.randint(20, 99) b = random.randint(10, a - 10) # both operands ≥ 2 digits, result ≥ 10 return f"{a} - {b}", a - b else: a = random.randint(6, 12) # tables ≥ 6 b = random.randint(6, 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, "")