print statements in places

This commit is contained in:
2026-04-30 00:39:44 -04:00
parent 680c59513c
commit 4e4440673b
7 changed files with 505 additions and 13 deletions

View File

@@ -37,9 +37,11 @@ def generate_linear_steps(problem):
elif b.is_positive:
steps.append(algebraic_steps.subtract_both_sides(current, b))
current = steps[-1]["after"]
## Second Step
if a != 1:
## Second Step
if a != 1 and a != -1:
steps.append(algebraic_steps.divide_both_sides(current, a))
elif a == -1:
steps.append(algebraic_steps.multiply_both_sides(current, a))
return steps
@@ -173,6 +175,7 @@ def generate_like_terms_steps (problem):
#ax + bx + c = d
steps = []
x = symbols('x')
current = problem["problem"]
## First Step
@@ -183,6 +186,23 @@ def generate_like_terms_steps (problem):
left, right = current.split("=")
left_expr = parse_expr(left)
b = left_expr.subs(x, 0)
if b.is_negative:
steps.append(algebraic_steps.add_both_sides(current, -b))
elif b.is_positive:
steps.append(algebraic_steps.subtract_both_sides(current, b))
current = steps[-1]["after"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
right_expr = parse_expr(right)
steps[-1]["after"] = f"{sstr(left_expr)} = {sstr(right_expr)}"
current = steps[-1]["after"]
## Third Step
div = left_expr.coeff(x)
if div != 1 and div != -1:
steps.append(algebraic_steps.divide_both_sides(current, div))
elif div == -1:
steps.append(algebraic_steps.multiply_both_sides(current, div))
return steps
@@ -191,6 +211,38 @@ def generate_quadratic_steps (problem):
#ax² + bx + c = 0
steps = []
x = symbols('x')
current = problem["problem"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
right_expr = parse_expr(right)
a = left_expr.coeff(x**2)
b = left_expr.coeff(x)
c = left_expr.subs(x, 0)
div = gcd(a, b, c)
if a.is_negative:
div = -div
## First Step
if div != 1 and c.is_zero == False:
steps.append(algebraic_steps.factor_out(current, div))
current = steps[-1]["after"]
elif c.is_zero:
div = gcd(a, b)
steps.append(algebraic_steps.factor_out(current, div*x))
current = steps[-1]["after"]
if c.is_zero == False:
## Second Steps
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
inner = left_expr / div
steps.extend(algebraic_steps.trinomial_by_grouping(current,inner))
current = steps[-1]["after"]
##Solve the Roots
steps.extend(algebraic_steps.solve_roots(current))
return steps
@register_steps_generator("difference_squares")
@@ -198,12 +250,37 @@ def generate_difference_squares_steps (problem):
#x² - a² = 0
steps = []
x = symbols('x')
current = problem["problem"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
b = left_expr.subs(x, 0)
## Step 1
if b.is_negative:
steps.append(algebraic_steps.add_both_sides(current, -b))
elif b.is_positive:
steps.append(algebraic_steps.subtract_both_sides(current, b))
current = steps[-1]["after"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
right_expr = parse_expr(right)
steps[-1]["after"] = f"{sstr(left_expr)} = {sstr(right_expr)}"
current = steps[-1]["after"]
## Step 2
steps.append(algebraic_steps.square_root_both_sides(current))
return steps
@register_steps_generator("zero_product")
def generate_zero_product_steps (problem):
#(x + a)(x + b) = 0
steps = []
current = problem["problem"]
steps.extend(algebraic_steps.solve_roots(current))
return steps
@@ -211,6 +288,28 @@ def generate_zero_product_steps (problem):
def generate_radical_steps (problem):
#√(x + a) = b
steps = []
x = symbols('x')
current = problem["problem"]
## First Step
steps.append(algebraic_steps.square_both_sides(current))
## Second Step
current = steps[-1]["after"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
b = left_expr.subs(x, 0)
if b.is_zero != False:
if b.is_negative:
steps.append(algebraic_steps.add_both_sides(current, -b))
elif b.is_positive:
steps.append(algebraic_steps.subtract_both_sides(current, b))
current = steps[-1]["after"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
right_expr = parse_expr(right)
steps[-1]["after"] = f"{sstr(left_expr)} = {sstr(right_expr)}"
return steps
@@ -218,6 +317,31 @@ def generate_radical_steps (problem):
def generate_fraction_steps (problem):
#(x/a) + b = c
steps = []
x = symbols('x')
current = problem["problem"]
## First Step
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
b = left_expr.subs(x, 0)
if b.is_zero == False:
if b.is_negative:
steps.append(algebraic_steps.add_both_sides(current, -b))
elif b.is_positive:
steps.append(algebraic_steps.subtract_both_sides(current, b))
current = steps[-1]["after"]
left, right = current.split("=")
left_expr = parse_expr(left, transformations=transformations)
right_expr = parse_expr(right)
steps[-1]["after"] = f"{sstr(left_expr)} = {sstr(right_expr)}"
current = steps[-1]["after"]
## Second step
num, den = fraction(left_expr)
if left_expr.subs(x,1).is_negative:
steps.append(algebraic_steps.multiply_both_sides(current, -den))
else:
steps.append(algebraic_steps.multiply_both_sides(current, den))
return steps
@@ -225,6 +349,17 @@ def generate_fraction_steps (problem):
def generate_binomial_steps (problem):
#a(x + b) + c(x + d) = e
steps = []
current = problem["problem"]
last_len = -1
while last_len != len(steps):
last_len = len(steps)
steps.extend(algebraic_steps.distribute_step(current))
if len(steps):
current = steps[-1]["after"]
steps.append(algebraic_steps.combine_like_terms(current))
current = steps[-1]["after"]
return steps