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: # For bases higher than 9 (base 10 and base 16), generate an invalid number differently. valid_digits = [str(random.randint(0, base - 1)) for _ in range(length - 1)] invalid_digit = chr(random.randint(65, 70)) # Use A-F for invalid hex digits 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