|
import random |
|
|
|
def generate_question(): |
|
base = random.choice([2, 8, 10, 16]) |
|
length = random.randint(3, 5) |
|
|
|
def generate_valid_number(): |
|
return ''.join([str(random.randint(0, base - 1)) for _ in range(length)]) |
|
|
|
def generate_invalid_number(): |
|
if base <= 9: |
|
valid_digits = ''.join([str(random.randint(0, base - 1)) for _ in range(length - 1)]) |
|
invalid_digit = str(random.randint(base, 9)) |
|
return valid_digits + invalid_digit |
|
else: |
|
|
|
valid_digits = [str(random.randint(0, base - 1)) for _ in range(length - 1)] |
|
invalid_digit = chr(random.randint(65, 70)) |
|
valid_digits[random.randint(0, length - 2)] = invalid_digit |
|
return ''.join(valid_digits) |
|
|
|
correct_answer = generate_invalid_number() |
|
options = [correct_answer] + [generate_valid_number() for _ in range(3)] |
|
random.shuffle(options) |
|
|
|
steps = [ |
|
f"Check if all digits are within the valid range for base {base}.", |
|
f"In base {base}, valid digits are 0 to {base-1}.", |
|
f"The number {correct_answer} contains a digit outside this range, so it is invalid." |
|
] |
|
|
|
question_data = { |
|
"question": f"Which of the following is an invalid number in base {base}?", |
|
"options": options, |
|
"correct_answer": correct_answer, |
|
"explanation": f"The number {correct_answer} is invalid in base {base} because it contains a digit outside the range 0-{base-1}.", |
|
"step_by_step_solution": steps |
|
} |
|
|
|
return question_data |
|
|