В помощь учителям информатики — заготовка генератора контрольных работ на языке Python. Маленький, но рабочий скрипт генерирует произвольную последовательность символов из словаря позиционных систем счисления до шестнадцатеричной включительно и выводит эту последовательность на экран.
Из собственного опыта знаю, сколь важным ресурсом является время преподавателя. Не менее важным ресурсом являются его силы, которые приходится экономить любым доступным способом. Вот для элементарной экономии сил и написана эта маленькая «заготовка», которую несложно превратить в полноценного «ассистента», полезного при подготовке тестовых и контрольных работ по информатике и информационным технологиям. Язык Python выбран как самый простой инструмент, тем не менее обладающий всеми необходимыми возможностями для решения нашей скромной задачи.
Итак, задача: взять словарь символов позиционных системы счисления (а он у таких систем, собственно, общий), выбрать случайным образом символы и сформировать символьную последовательность заданной длины для заданной системы счисления. И представленную символьную последовательность «вбить» на бланке контрольной работы, чтобы ученики, в свою очередь, перевели её (число, этой последовательностью закодированное) в десятичную систему счисления (например). То есть была запись в одной системе счисления (например двоичной), а стала, усилиями ученика, в другой (например десятичной). Разумеется, самый «правильный» подход предполагает, что ученик записывает не только ответ, но и подробное решение (в данном случае — слагаемые в форме полинома).
Само собой, придумывать варианты заданий можно и самостоятельно, но иногда даже на это сил уже не остается (огромный объем рутины тоже отнимает немало сил). А силы разумнее тратить на более творческие грани учительской работы. Теперь — сам код скрипта (пока без комментариев):
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import random
symbols = '0123456789ABCDEF'
base = 16
code_len = 2
random.seed()
syms_list = [random.choice(symbols[:base]) for x in range(code_len)]
syms_code = ''.join(syms_list)
print('Последовательность в {}-ой сист. сч.: {}'.format(base, syms_code))
print('Она же в десятичной сист. сч.: {}'.format(int(syms_code, base=base)))
Куча пустых строк в тексте нашей программы — для выделения смысловых частей. Текстовый файл со скриптом мы назовем, например, gen_test.py, а запускать его будем так:
$ python3 gen_test.py
Кстати, делаем мы это в Linux (в одной из семейства Ubuntu). А вот так выглядит один из возможных результатов работы скрипта (запуск скрипта и его вывод соответственно в терминале):
$ python3 gen_test.py Последовательность в 16-ой сист. сч.: 11 Она же в десятичной сист. сч.: 17
При следующем запуске нашего скрипта может получиться что-нибудь другое, например это:
$ python3 gen_test.py Последовательность в 16-ой сист. сч.: DC Она же в десятичной сист. сч.: 220
Пожалуйста — записывай вариант задания на бланке контрольной работы, результат в десятичной системе — на контрольном листке (если он нужен). Разумеется, в такой форме наш «ассистент-генератор» не будет помогать ученикам ограничением старшего разряда по величине (для снижения трудоемкости умножения) и формированием «провокационных» символьных последовательностей (типа «0110101» в восьмеричной и шестнадцатеричной системах счисления). Но основная задача — формирование случайных символьных последовательностей для контрольной работы — скриптом выполняется. Для более серьезной «интеграции» скрипта в работу учителя, само собой, скрипт надо дорабатывать с сторону усложнения 🙂
Далее — тот же код, но с комментариями:
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import random # Импортируем модуль для работы со случайными числами
symbols = '0123456789ABCDEF' # Словарь позиционных систем счисления
base = 16 # Основание системы счисления
code_len = 2 # Длина генерируемой последовательности символов
random.seed() # Инициализация генератора случайных чисел (системным временем)
# Генерируем список случайных символов длиной code_len из словаря symbols
# до границы base (используем срез последовательности)
syms_list = [random.choice(symbols[:base]) for x in range(code_len)]
# Объединяем элементы списка символов в строку
syms_code = ''.join(syms_list)
# Выводим на экран основание системы счисления и сгенерированную строку
print('Последовательность в {}-ой сист. сч.: {}'.format(base, syms_code))
# Выводим значение этой последовательности в десятичной системе счисления
# для самопроверки :)
print('Она же в десятичной сист. сч.: {}'.format(int(syms_code, base=base)))
Достаточно изменить значение base, чтобы получить запись в другой системе счисления, и значение code_len, чтобы изменить длину символьной последовательности (число разрядов). Поэтому — меняем, проверяем, используем.
Ну и напоследок — данный способ решения задачи создания тестовых заданий не единственный и, скорее всего, не оптимальный. Но начать можно и с этого. Маленький скрипт — в копилку инструментов учителя информатики.