math / modules /numbering_system /conversion_bases.py
Sina Media Lab
Updates
74a6085
raw
history blame
2.6 kB
import random
import sympy as sp
title = "Conversion Between Bases"
description = "This module covers conversion techniques between different bases, including with and without fractions."
def generate_question():
# Choose a base and corresponding valid digits, ensuring from_base and to_base are not the same
from_base = random.choice([2, 8, 10, 16])
to_base = random.choice([b for b in [2, 8, 10, 16] if b != from_base])
digits = '01' if from_base == 2 else '01234567' if from_base == 8 else '0123456789' if from_base == 10 else '0123456789ABCDEF'
# Generate a valid number for the selected from_base
number = ''.join(random.choice(digits) for _ in range(4))
def convert_number(number, from_base, to_base):
# Convert from `from_base` to base 10 using Python's built-in `int`
base_10_value = int(number, from_base)
# Convert from base 10 to `to_base` using Python's built-in methods
if to_base == 10:
return str(base_10_value), base_10_value
elif to_base == 16:
return hex(base_10_value)[2:].upper(), base_10_value
elif to_base == 8:
return oct(base_10_value)[2:], base_10_value
elif to_base == 2:
return bin(base_10_value)[2:], base_10_value
correct_answer, base_10_value = convert_number(number, from_base, to_base)
options = [correct_answer]
# Generate incorrect answers
while len(options) < 4:
invalid_number = ''.join(random.choice(digits) for _ in range(4))
invalid_answer, _ = convert_number(invalid_number, from_base, to_base)
if invalid_answer not in options:
options.append(invalid_answer)
random.shuffle(options)
question = f"Convert the number {number} from base {from_base} to base {to_base}."
explanation = f"The number {number} in base {from_base} is {correct_answer} in base {to_base}."
# Step-by-step solution using SymPy for demonstration
step_by_step_solution = [
f"Step 1: Convert the number {number} from base {from_base} to base 10:",
f" {number} (base {from_base}) = {base_10_value} (base 10).",
f"Step 2: Convert the base 10 number to base {to_base}:",
f" {base_10_value} (base 10) = {correct_answer} (base {to_base}).",
f"Step 3: The correct answer is {correct_answer}."
]
return {
"question": question,
"options": options,
"correct_answer": correct_answer,
"explanation": explanation,
"step_by_step_solution": step_by_step_solution
}