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 }