mathsadventure / src /levels.py
nizzad's picture
Upload 8 files
4562618 verified
import random
from dataclasses import dataclass
@dataclass
class Problem:
num1: int
num2: int
operator: str
answer: int
def __str__(self):
return f"{self.num1} {self.operator} {self.num2} = ?"
def generate_problem(grade: int) -> Problem:
"""Generate a math problem appropriate for the given grade level"""
if grade == 1:
# Grade 1: Simple addition and subtraction with numbers 1-10
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
operator = random.choice(['+', '-'])
# Ensure subtraction doesn't result in negative numbers
if operator == '-' and num2 > num1:
num1, num2 = num2, num1
elif grade == 2:
# Grade 2: Addition and subtraction with numbers 1-20
num1 = random.randint(1, 20)
num2 = random.randint(1, 20)
operator = random.choice(['+', '-'])
if operator == '-' and num2 > num1:
num1, num2 = num2, num1
elif grade == 3:
# Grade 3: Addition, subtraction with numbers 1-50, and simple multiplication
num1 = random.randint(1, 50)
operator = random.choice(['+', '-', '*'])
if operator == '*':
num2 = random.randint(1, 10)
else:
num2 = random.randint(1, 50)
if operator == '-' and num2 > num1:
num1, num2 = num2, num1
elif grade == 4:
# Grade 4: All operations, multiplication with larger numbers
num1 = random.randint(1, 100)
operator = random.choice(['+', '-', '*', '/'])
if operator == '*':
num2 = random.randint(1, 12)
elif operator == '/':
# Generate division problems with whole number answers
num2 = random.randint(1, 12)
num1 = num2 * random.randint(1, 10)
else:
num2 = random.randint(1, 100)
if operator == '-' and num2 > num1:
num1, num2 = num2, num1
else: # grade 5
# Grade 5: Larger numbers and more complex operations
num1 = random.randint(1, 200)
operator = random.choice(['+', '-', '*', '/'])
if operator == '*':
num2 = random.randint(2, 15)
elif operator == '/':
num2 = random.randint(2, 15)
num1 = num2 * random.randint(1, 20)
else:
num2 = random.randint(1, 200)
if operator == '-' and num2 > num1:
num1, num2 = num2, num1
# Calculate answer
if operator == '+':
answer = num1 + num2
elif operator == '-':
answer = num1 - num2
elif operator == '*':
answer = num1 * num2
else: # operator == '/'
answer = num1 // num2
return Problem(num1, num2, operator, answer)