Я часто делаю своим детям тренажеры для отработки базовых вычислительных навыков: иногда в тетрадке от руки, иногда в табличке Excel. А сегодня мы вместе с сыном сделали для повторения таблицы умножения тренажер в Python. Постараюсь все написать так, чтоб повторить за нами получилось даже у тех, кто с программированием не знаком. А для тех, кто не захочет разбираться добавлю в конце еще и готовый код программы.
Где писать?
Можно, конечно, установить себе среду разработки Python, но для наших целей вполне достаточно зайти на сайт с онлайн - компилятором, например вот этот https://www.online-python.com/ там в окне уже набрана небольшая программа, можно ее смело удалить или создать еще одну вкладку рядом с main.py (нажатием на плюсик) и работать в ней.
Самая первая программа.
Компьютер не поймет, если мы ему скажем "придумай десяток примеров", чтобы общаться с ним нужно знать специальные языки, сегодня мы выбрали Питон и зашли на специальный сайт, который способен понимать команды на этом языке.
print("3*5=")
Чтобы попросить (или приказать?) компьютеру вывести на экран пример вроде 3*5= нужно набрать print("3*5="). Очень важно писать именно так - print с маленьком буквы, потом скобочки, внутри скобочек - кавычки, а внутри кавычек уже то, что хочется написать. Набираем эту строчку и можно уже нажать зелененький треугольник в нижней части экрана. Если еще чуть ниже кнопочки появится нужная надпись, то можете себя поздравить, компьютер вас понимает! А ребенок, который сидел рядом (а может быть ему позволили напечатать текст?) уже поучаствовал в создании своей первой работающей программы.
Добавляем проверку.
Пока проку от нашей программы нет. Хотелось бы, чтобы она хотя бы научилась проверять ответы. Хорошо, чтобы проверить ответ, надо его от нас получить. Все значения, с которыми работает программа должны храниться в памяти компьютера и иметь имя, по которому к ним можно обратиться. Назовем нашу переменную гордым именем "a". Чтобы записать в нее значение, которое мы будем вводить с клавиатуры нужна специальная команда:
a = input()
пишется эта команда на следующей строке после print(), снова обязательно с маленькой буквы, вокруг знака равенства можно поставить пробелы.
Кстати, раз уж мы пишем тренажер для ребенка, то лучше все-таки использовать более привычный знак умножения. С клавиатуры он набирается с помощью Alt-кода: убеждаемся, что нажата клавиша Num Lock, зажимаем Alt и вводим с дополнительной клавиатуры 250, отпускаем Alt и видим точку (·) в середине строки. В блоге это тоже работает :)
Программирование требует четкой последовательности команд, но мы можем создать алгоритм, который в разных ситуациях будет вести себя по-разному. В этом нам помогут условные операторы. Смысл такой: мы проверяем какое-то условие и если (if) оно выполнено, то делаем одну последовательность действий, а иначе (else) другую. Тут при наборе важно не только соблюдать регистр, ставить в нужных местах скобочки, кавычки и двоеточия, но и сдвинуть начало строк со списком команд относительно условия.
if a=="15" :
print("+")
else :
print("-")
Двойной знак равенства означает сравнение, то есть мы не задаем значение, а проверяем равно ли оно "15", а кавычки нужны потому, что число ввели с клавиатуры и компьютер воспринимает наше число как последовательность символов, а символы положено заключать в кавычки.
Тут уже можно поиграть с программой ввести правильный ответ, ввести неправильный, убедиться, что реакция будет разной.
А программа ли нас проверила?
Как-то глупо получается, сами написали пример, сами задали правильный ответ, а потом сами решаем. Пусть программа считает, уж умножить 3 на 5 компьютер точно сможет, если правильно попросить. Заведем еще парочку переменных: пусть у нас теперь будут a, b и c первые две - для множителей, а последнее - для произведения. Вставим вместо нашего первого print("3*5=") вот такой фрагмент:
a=3
b=5
print(a,"·",b,"=")
Здесь мы говорим компьютеру, что у нас есть одно число, к нему можно обращаться по имени "a", и равно это число трем, есть второе, с именем "b", которое равно пяти. Теперь, чтобы напечатать пример нам надо вывести на экран значение переменной а (для этого она набрана в операторе print() без кавычек), потом знак умножения, значение b и знак равенства. Все, что надо напечатать перечислено внутри скобок print() через запятую, так требует язык.
Следующую строчку тоже придется подправить, пусть программа понимает, что мы собираемся вводить в нее числа, а не какие-нибудь загогулины. Для этого поместим input() внутрь оператора int(). Ну и раз мы переменную "a" забрали для множителя, то считывать с клавиатуры будем "c". Должно получиться так:
c = int(input())
Для чего такие заморочки? А для того, что теперь умножение для проверки мы можем получить самой программе. Наконец-то!
Вместо if a=="15" напишем
if c==a*b
Здесь, кстати, знак умножения придется оставить звездочкой, но он нам не помешает.
А пример кто придумал?
Это все хорошо, но мы же не хотим каждый раз менять значения множителей вручную? И писать программу только для того, чтоб она проверила верно ли мы умножили? С этим и калькулятор неплохо справится, или таблица на обратной стороне тетради. Верно! Примеры пусть тоже компьютер сочиняет. В этом месте нам с сыном пришлось воспользоваться помощью гугла и вот что мы выяснили: чтобы компилятор сумел сгенерировать случайное число, надо написать вначале программы
import random
А чтобы не ограничиваться в генерации дробными числами от 0 до 1 добавить еще
from random import randint
(Потом проверка показала, что достаточно только второй строчки, но в нашей программе было обе)
После этого компилятор начнет понимать, что если мы говорим ему (печатаем в тексте программы)
randint(1,9)
то надо быстренько придумать целое число от одного до девяти.
Меняем в программе a=3 b=5 на
a=randint(1,9)
b=randint(1,9)
и программа начинает сама генерировать примеры, новые при каждом своем запуске.
Еще немного доработок.
Чтобы каждый раз не запускать программу можно зациклить ее выполнение, для этого тоже есть специальный оператор
Вставим перед строкой a=randint() вот такую запись:
for i in range(10):
и обязательно все строки под этой надписью, даже те, которые уже и так правее остальных, сдвинем вправо с помощью клавиши Tab. Выполнение всех сдвинутых строк при этом будет вынуждено повторяться 10 раз и мы сможем решать по 10 примеров в каждый запуск программы.
Мы решили добавить еще одну фичу - счетчик правильных ответов.
Для него нужна еще одна переменная, которая до запуска программы равна нулю. Если какой-то пример решается правильно, то значение переменной увеличивается на 1. После завершения цикла выводится сообщение о количестве правильных ответов.
Получилось вот так. Называется, найдите 10 отличий и одну орфографическую ошибку:
Полный текст программы
Как и обещала, добавляю полный код который можно скопировать и вставить в main.py и добавить в нужных местах сдвиги начала строк (Дзен убирает пробелы и табуляцию в начале строки).
from random import randint
count = 0
for i in range (10):
a = randint(1,9)
b = randint(1,9)
print(a,"·",b,"=")
c = int(input())
if c==a*b :
print("Верно!")
count+=1
else :
print("Нет, получится ", a*b)
print("Вы набрали ", count, " баллов из 10")
Заключение.
Посмеялись с сыном, что очень удобно получается: научил ребенка писать программы, он сам себе тренажер сгенерировал, сам позанимался, а родитель свободен!
А если серьезно, то программировать в Питоне сыну понравилось больше, чем составлять таблички в Excel, а еще я знаю некоторых взрослых, которые с удовольствием писали себе похожие средства для изучения иностранных слов. Так что дерзайте! И любите своих детей независимо от того, могут ли они правильно написать слово "баллы"!