Найти тему

Тренажер по арифметике в консоли Python. Пишем вместе с ребенком. Вычитание и деление.

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

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

Чтобы не искать по всему каналу, еще раз добавлю картинку и код из предыдущей статьи (обратите внимание на пробелы в начале некоторых строк, они очень важны; добавьте их в код, чтобы было как на картинке).

Код, который будет изменять.
Код, который будет изменять.
from random import randint
for i in range (10):
a = randint(1,9)
b = randint(1,9)
rez=a+b
print(a,"+",b,"=")
c = int(input())
if c==rez :
print("Верно!")
else :
print("Нет, получится ", rez)
print("Урок окончен")

Меняем сложение на вычитание.

Что произойдет, если мы заменим в выделенном фрагменте кода знак "+" на знак "-"? Вот так:

a = randint(1,9)
b = randint(1,9)
rez=a-b
print(a,"-",b,"=")

Наш тренажер при запуске будет выдавать примеры вида 8-3 и правильно проверять ответ. Тем не менее, этого, скорее всего, окажется недостаточно.

a и b - любые числа от 1 до 9. Что скажет ребенок, если программа попросит его решить 4-7? Скорее всего не то, что мы хотели. Пока предложу два вариант борьбы с такими разностями. Первый - генерировать второе число заведомо меньше или равного первому, то есть вместо b=randint(1,9) написать b=randint(1,a). Второй - после получения значений проверять какое из них больше и, в случае необходимости, менять их местами.

Первый хорош тем, что изменить нам придется только один символ. А для чего нужен второй? Вопрос из области мат. статистики, но сейчас расскажу!

Генератор случайных чисел работает так, что каждое значение выпадает с одинаковой частотой. Чисел всего 9, так что каждое значение выпадает примерно один раз из девяти. Значит если ребенок решит 90 примеров, то приблизительно в десяти из них первым числом будет 1 и в десяти - 9. Второе число у нас генерируется в диапазоне от 1 до a. Если a=1, то и второе всегда будет 1. Мы десять раз решаем пример 1-1. А если a=9, то b может принимать любое значение от 1 до 9 и равняется, например, пяти только один раз из девяти. Значит пример 9-5 встретится нам только 1 раз на 81! Не страшно, но хочется более рационально распределить задания.

Как осуществить второй вариант? Проверить, какое из чисел больше, для этого в Питоне есть условный оператор if, и если a<b, то поменять их местами. Когда я училась в школе, это было программой десятого класса по информатике. Расскажу чуть подробнее.

Задача: есть две переменные a и b, содержащие некоторые значения, надо сделать так, чтобы значение переменной a оказалось в переменно b, а значение переменной b было записано в переменную a.
Решение: Если мы напишем a=b, то значение из b окажется записанным в a, а значение из a удалится. Чтобы его не потерять, запишем его временно в какую-нибудь другую переменную (назовем ее temp) и уже потом поменяем значение в a, а после этого запишем значение из temp в b.

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

a = randint(1,9)
b = randint(1,9)
if a<b:
____tem=a
____a=b
____b=temp
rez=a-b
print(a,"-",b,"=")

Должно получиться вот так:

Программа - тренажер, на тему "Вычитание в пределах десятка"
Программа - тренажер, на тему "Вычитание в пределах десятка"

Есть еще один способ, но им мы воспользуемся в другом тренажере - тренажере на определение частного от деления.

Деление.

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

a = randint(1,9)
b = randint(1,9)
rez=a/b
print(a,":",b,"=")

Ерунда какая-то! Сколько примеров наш второклашка сможет решить? Нам надо, чтобы первое число заведомо делилось на второе! Как этого добиться? Получить первое число по принципу b·n. Где взять это n? Смотрим a:b=(b·n):b=n. Значит n - это и есть результат!

Значит наш участок кода будет выглядеть так:

rez = randint(1,9)
b = randint(1,9)
a=b*rez
print(a,":",b,"=")

А код целиком будет выглядеть так

Программа - тренажер по теме "Табличное деление"
Программа - тренажер по теме "Табличное деление"

Заключение

На этом всё! Экспериментируйте, создавайте! Приятного решения и выдающихся результатов!