File size: 2,597 Bytes
bc85220
 
c9ca893
 
 
d924141
 
bc85220
 
 
f59ba06
 
 
 
 
984a89c
c9ca893
4c02307
84a97d9
ff3311b
c9ca893
84a97d9
ff3311b
84a97d9
ff3311b
84a97d9
ff3311b
84a97d9
984a89c
84a97d9
c9ca893
984a89c
c9ca893
bc85220
f59ba06
84a97d9
bc85220
f59ba06
c9ca893
 
 
 
bc85220
1f50ad3
ff3311b
c9ca893
bc85220
84a97d9
bc85220
84a97d9
bc85220
c9ca893
 
 
 
 
984a89c
c9ca893
 
984a89c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
    }