Найти тему

Повторяем дроби перед учебным годом. Создаем в Python генератор примеров.

Используя online Pyhon (программировать уметь не обязательно) и текстовый редактор LibreOffice будем быстро генерировать любое необходимое количество примеров на сложение дробей с разными знаменателями.

До начала учебного года осталось две недели. Неплохо бы освежить знания и закрепить имеющиеся навыки. Моя старшая дочь идет в этом году в шестой класс и есть подозрение, что она немного забыла за лето как выполняются действия с дробями.

Как большой любитель автоматически генерируемых тренажеров (в Excel или Python), я, конечно, и для дробей хотела создать что-то подобное. Однако, красиво совместить формат простой дроби и генератор случайных чисел не удалось. Несколько дней я писала дочке примеры в тетради от руки, но потом нашла устраивавший меня вариант создание тренажера для печати. Решила поделиться этим способом, вдруг кому тоже актуально.

Числитель сверху, знаменатель снизу

Это самая большая проблема генерации примеров с использованием обыкновенных дробей. Консольный вывод Python или ячейка Excel такой формат числа, насколько мне известно, не поддерживают. Есть разные способы выкрутиться из этой ситуации (в одной из следующих статей напишу как сделать это в Excel), в этой статье я предлагаю воспользоваться возможностями текстового редактора. У меня и на рабочем компьютере и дома, вместо привычного многим Microsoft Word используется бесплатный LibreOffice Writer, так что и текст будем писать для него. В других редакторах тоже можно, но тогда вам придется самим разобраться как в них набираются формулы.

Этап 1. Ввод формул в выбранном редакторе

Для начала проверяем каким образом можно ввести дроби с клавиатуры. Открываем в текстовом редакторе панель добавления формул.

Добавление формул в текстовый документ
Добавление формул в текстовый документ

Ищем интуитивно понятную кнопку добавления дроби и смотрим подсказку в нижней части экрана. Если вы, как и я, используете LibreOffice, то и подсказка будет такой же. Из нее следует, что для печати формулы надо ввести: "числитель over знаменатель".

Здесь формулы можно вводить без предварительной подготовки и изучения документации
Здесь формулы можно вводить без предварительной подготовки и изучения документации

Теперь понятно к чему стремиться, переходим к программированию.

Генератор данных

Если вы никогда не писали программных кодов и соответствующих редакторов не имеете, то предлагаю воспользоваться онлайн версией Python, например, здесь.

Этап 2. Автоматическое создание дроби

Напишем функцию, которая генерирует обыкновенную правильную дробь со знаменателем не больше десяти (не будем лепить сюда же повторение умножения в столбик, так что вполне достаточно). Для этого нам нужно два числа - знаменатель - любое число от двух до десяти и числитель - любое натуральное число меньше знаменателя.

В Python любая пользовательская функция начинается со слова def, далее вводится ее название, круглые скобки и двоеточие, вот так:

def genFraction ():

А для генерации случайного целого числа в Python уже имеется функция random.randint(), правда, чтобы ей воспользоваться, в самом начале программы надо написать:

import random

Потом можно вернуться к "def genFraction ():", и в следующих после двоеточия строчках, обязательно отступив слева 4 пробела написать:

denominator = random.randint(2,10)
numerator = random.randint(1,denominator-1)

Числа сгенерированы, осталось сделать из них строчку, которую LibreOffice расценит как дробь. Из этапа 1 помним, что для этого между числителем и знаменателем надо добавить слово "over". Там где мы говорим "добавить в строку" Python позволяет нам использовать знак плюс.

return str(numerator) + " over " + str(denominator)

Слово return здесь дает указание функции выдать то, что за ним следует в качестве результата, а str() напоминает компьютеру, что число можно записать с помощью цифр.

Выглядеть наша программа должна пока вот так:

Импорт функций генератора случайных чисел и добавление функции генерации дроби
Импорт функций генератора случайных чисел и добавление функции генерации дроби

Теперь у нас есть инструмент для генерации дроби, но так как одной дроби нам мало, то переходим к следующему этапу.

Этап 3. Создание примера

Теперь научим нашу программу печатать примеры.

Назовем функцию printExample(), как и в прошлый раз начнем ее описание со слова def и закончим строку двоеточием:

def printExample():

Дроби программа уже выдавать умеет, осталось добавить между ними знак плюс.

exampleString = genFraction() + " + " + genFraction () + " = ~ newline"

Внимательные читатели, наверное, заметили, что мы добавили не только знак плюс, но и еще какие-то "= ~ newline". Эта добавка нужна для того, чтобы LibreOffice добавил в конце знак равенства, а следующую формулу был готов расположить на следующей строке.

Осталось получившуюся строку дать в распоряжение пользователю. Продвинутые программисты Python могут печатать сразу в файл, а мы выведем в консоль:

print(exampleString)

При желании можно добавить еще нумерацию, тогда строка будет выглядеть так:

print(i+1, '.~ '+ exampleString)

В итоге, функция, генерирующая пример, выглядит вот так:

Генерация и печать примера
Генерация и печать примера

Этап 4. Генерация тренажера

А теперь напишем саму программу.

for i in range(15) :
printExample()

Всё! Теперь при запуске будет 15 раз вызываться функция, генерирующая и выводящая на печать примеры. Как должен выглядеть полный текст программы с учетом импорта, всех функций и нужных пробелов, можно посмотреть на скриншоте ниже.

Этап 5. Запускаем, копируем

Как следует из заголовка, надо нашу программу запустить и результаты скопировать. На всякий случай добавлю фото кнопок, который надо для этого нажать.

Программа целиком и результат ее запуска
Программа целиком и результат ее запуска

Теперь наши примеры в буфере обмена, осталось дать их на обработку текстовому редактору.

Окончательная обработка и печать

Этап 6. Вставляем в файл и преобразуем формат

Открываем LibreOffice, нажимаем Ctrl+V и видим, какую-то не очень понятную писанину. Не волнуйтесь, очень скоро она будет иметь совсем другой вид.

Удалим последние строки, в которых говорится, что ** Process exited - Return Code: 0 ** Press Enter to exit terminal

Все остальное выделяем (Ctrl+A) и ищем уже знакомую кнопку для создания формул. Вставка - Объект OLE - Формула:

Преобразуем тест в формулы
Преобразуем тест в формулы

За рамочку, которой обведены примеры, не волнуйтесь, при печати или сохранении в pdf ее не будет. А если вдруг будет - пишите в комментариях, подскажу как убрать.

Получившийся файл и результат его экспорта в pdf
Получившийся файл и результат его экспорта в pdf

Этап 7. Печатаем

Если дома нет принтера, то перед отправкой в печатающую организацию, экспортируйте файл в pdf документ, иначе на выходе может получиться несколько не то, чего мы тут так красиво наворочали.

Использование по назначению

Тренажер готов, но впереди самая сложная задача!

Этап 8. Даем ребенку решать

Дать-то не проблема, проблема, чтобы он взял. Даже полные решимости дети иногда отвлекаются, забывают и игнорируют задания. Чем мотивировать ребенка, решать приходится родителю самостоятельно. Иногда это получается, иногда - не очень, но пытаться стоит!

Этап 9. Проверка

В данном виде тренажера проверять решение придется вручную. Автоматическую проверку в LibreOffice вставлять не умею, но вычислить и распечатать ответы при желании можно. Если интересно как - пишите в комментариях!

Итог

На сегодня всё! Код Pyton в течение 6 месяцев будет доступен вот здесь.

Всем удачных решений, и пусть жизнь подкидывает только посильные задачи!