Что тренируют задачи на переменные
Задачи на переменные тренируют 3 действия: получить значение, сохранить его под именем и использовать в вычислении. Переменная — это подписанная коробка в памяти: имя остаётся прежним, а содержимое можно заменить.
Кажется, что задачи с переменными слишком просты, чтобы тренироваться. Но именно здесь появляются привычки, которые потом либо помогают, либо мешают: давать переменным понятные имена, превращать строку из input в число, не путать знак присваивания со знаком равенства из математики. Ребёнок, который уверенно решает такие упражнения, легче переходит к условиям и циклам, потому что не тратит внимание на базовые вещи.
В школьной информатике эта тема тоже стоит первой. По федеральной образовательной программе основного общего образования в 8 классе изучают переменные целого, вещественного и символьного типа и оператор присваивания[1]. Язык учитель выбирает сам, и Python входит в список разрешённых, поэтому упражнения со страницы подходят и для подготовки к урокам.
Как работает тренажёр с автопроверкой
Тренажёр под заголовком — это 8 задач с номерами сверху: выберите номер, прочитайте условие и пример, напишите код в редакторе и нажмите «✓ Проверить». Программа запустит решение на нескольких тестах.
Справа появится список тестов: пройденные отмечаются зелёным, а у непройденных видно, что ожидалось и что получилось на самом деле. Сравнение строгое, поэтому лишний пробел или другая буква засчитываются как ошибка. Это не придирка: в олимпиадах и на экзамене ответ тоже проверяет программа. Кнопка «Подсказка» открывает намёк, «Показать решение» — готовый код, «Сбросить» возвращает заготовку.
В официальной документации Python функция input описана так: она читает одну строку и возвращает её без символа перевода строки. Поэтому ввод в тестах подаётся построчно: если в условии два числа, каждое придёт отдельным вызовом input. Результаты сохраняются только в браузере и видны на странице прогресса, поэтому на другом компьютере список решённых будет пустым.
Пять приёмов для всех восьми упражнений
Все 8 упражнений решаются пятью приёмами: ввод, преобразование типа, присваивание, арифметика и вывод. Если знать их наизусть, любая задача из набора укладывается в 3–5 строк.
| Приём | Запись | Где пригодится |
| Ввод строки | name = input() | Задача 1, задача 3 |
| Ввод целого числа | a = int(input()) | Задачи 2, 4–8 |
| Присваивание результата | bytes_count = kb * 1024 | Задача 7 |
| Целая часть и остаток | total // 60, total % 60 | Задачи 4 и 8 |
| Обмен значений | a, b = b, a | Задача 3 |
| Вывод с подписью | print('S =', s) | Задачи 5 и 6 |
Обратите внимание на ввод чисел. Функция input всегда возвращает строку, даже если пользователь набрал цифры. Поэтому input() + input() для «3» и «4» даст «34», а не 7. Обёртка int(...) превращает текст в целое число, после чего арифметика работает как в математике. Для дробных значений используют float(...), но в этом наборе все данные целые.
Руководство PEP 8 советует ставить по одному пробелу вокруг знака присваивания: x = 5 читается легче, чем x=5. Само присваивание читается справа налево: сначала Python вычисляет выражение после знака «=», потом кладёт результат в переменную слева. Отсюда запись x = x + 1, которая в математике бессмысленна, а в программе означает «увеличь x на единицу».
Разбор: обмен значениями двух переменных
Обмен — классическая задача, потому что прямое решение «a = b, потом b = a» не работает: после первой строки старое значение a потеряно, и в обеих переменных окажется одно и то же.
Представьте два стакана: в одном сок, в другом молоко. Перелить их друг в друга без третьего стакана нельзя. В программе роль третьего стакана играет временная переменная:
a = "сок"
b = "молоко"
tmp = a
a = b
b = tmp
print(a, b)
молоко сок
В Python есть и короткая запись a, b = b, a. Она работает потому, что правая часть вычисляется целиком до присваивания: Python сначала собирает пару значений, а потом раскладывает её по именам. Короткий вариант удобен, но способ с временной переменной полезно уметь объяснить: он встречается в других языках из школьной программы и в алгоритмах сортировки.
Разбор: перевод единиц через // и %
Чтобы перевести минуты в часы и минуты, нужны 2 операции: // отбрасывает дробную часть деления, а % возвращает остаток. Для 125 минут это 2 часа и 5 минут.
total = 125
hours = total // 60
minutes = total % 60
print(hours, "ч", minutes, "мин")
Многие задачи на переменные и единицы измерения устроены именно так. Тот же приём решает задачу про коробки с карандашами: сколько коробок заполнится целиком и сколько карандашей останется. Если заметить, что условия разные, а схема одна, — это и есть перенос знаний, ради которого стоит решать много похожих упражнений. По той же схеме секунды переводят в минуты, копейки в рубли, а дни в недели.
Задача про килобайты показывает другую идею: промежуточный результат лучше сохранить. Сначала считаем байты и кладём их в переменную bytes_count, потом умножаем её на 8 и получаем биты. Можно было бы написать kb * 1024 * 8 сразу, но с именованной переменной программу легче проверить и дополнить.
Типичные ошибки в задачах с переменными
Большинство ошибок в этой теме — 4–5 повторяющихся ситуаций, и по сообщению Python их легко узнать. Таблица поможет понять, что пошло не так, ещё до того, как открывать подсказку.
| Что видно | Причина | Как исправить |
| Вместо 7 вывелось 34 | Строки склеились, int не вызван | Оберните ввод: int(input()) |
| NameError: name 'Name' is not defined | Имя написано с другой буквой | Python различает регистр: name и Name — разные имена |
| TypeError при сложении | Число складывают со строкой | Приведите к одному типу через str() или int() |
| Ответ «Привет, Аня !» | print через запятую ставит пробел | Склейте строки знаком + или задайте sep='' |
| Обе переменные равны | Обмен без временной переменной | Используйте tmp или a, b = b, a |
Подробнее об отдельных сообщениях — на странице про ошибку NameError. Если же Python ругается на скобки и кавычки, это синтаксическая ошибка: её стоит искать в строке, указанной в сообщении, или в строке над ней.
Как решать, если застрял
Если решение не проходит тест, не переписывайте всё заново: сначала выясните, на каком шаге программа отличается от задуманной. Для этого хватает 3 действий.
- Посчитайте на бумаге. Возьмите ввод из непройденного теста и выполните каждую строку вручную, записывая значения переменных в столбик.
- Добавьте временный print. Выведите промежуточное значение, например
print(hours), и сравните с расчётом. Потом уберите лишний вывод, иначе тест не пройдёт. - Сравните формат. Посмотрите на «Ожидалось» и «Получилось» посимвольно: пробелы, двоеточия и регистр букв должны совпадать.
Подсказку стоит открывать после 2–3 честных попыток, а готовое решение — только когда идей совсем не осталось. Через пару дней полезно вернуться и решить те же упражнения без подсказок: исследование Roediger и Karpicke показало, что попытка вспомнить закрепляет материал лучше повторного чтения[2].
Когда этот набор не подходит
Задачи на переменные из этого набора рассчитаны на тех, кто уже написал первую программу и знает print. В 4 ситуациях лучше начать с другого или перейти дальше.
- Ребёнок ни разу не запускал код. Сначала стоит за 15 минут собрать первую программу на Python, а потом возвращаться сюда.
- Ученику 6–7 лет. Клавиатурный ввод и английские слова мешают; блоки в ScratchJr или Scratch здесь удобнее.
- Все 8 задач решены быстрее чем за 20 минут. Пора переходить к ветвлениям: тренировать то, что уже получается, не нужно.
- Нужны дробные ответы вида 2,5. Здесь все данные целые; дробям посвящена отдельная страница о математике в Python.
«Знак = в Python означает равенство, как в математике». Это миф: одиночный знак означает присваивание, а сравнение записывают двумя знаками ==. Поэтому
x = x + 1— нормальная команда, а не противоречие.
«Переменную нужно объявлять заранее с указанием типа». Для Python это не подтверждается: имя создаётся в момент первого присваивания, а тип определяется значением. Объявление типов нужно в C++ и Паскале, но не здесь.
Чего делать нельзя
Нельзя считать упражнения решёнными, если код прошёл тест случайно: каждая строка должна быть понятна автору. Шесть правил помогут не закрепить плохие привычки.
- Нельзя называть переменные именами встроенных функций — после
print = 5вывод в программе перестанет работать. - Не следует давать имена вроде a1, a2, a3 там, где есть смысл: руководство PEP 8 советует понятные имена в стиле snake_case[3].
- Не стоит начинать имя с цифры или писать его через пробел — Python не примет такую запись.
- Нельзя подгонять вывод под тест, печатая готовый ответ без вычислений: на втором тесте такая программа ошибётся.
- Не стоит сразу открывать решение: прочитанный чужой код запоминается хуже, чем собственная попытка.
- Не допускается складывать строку и число без преобразования — Python остановится с TypeError.
Теорию по теме удобно держать открытой рядом: в статье о переменных в Python подробно описаны правила имён и изменение значений. Когда все восемь упражнений пройдены, следующий шаг — задачи на условия if, где те же значения начинают управлять ходом программы.
Источники
[1] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[2] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
[4] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
Вопросы и ответы
Можно ли решать эти задачи на телефоне?
Редактор открывается в мобильном браузере, но печатать скобки и отступы на экранной клавиатуре неудобно. Для регулярных занятий лучше компьютер или планшет с клавиатурой.
Почему int(input()) пишут в одну строку?
Так короче: сначала выполняется внутренний вызов и возвращает строку, затем int превращает её в число. Можно разбить на две строки — результат будет тем же.
Что будет, если ввести буквы вместо числа?
Программа остановится с ошибкой ValueError: из слова нельзя получить целое. В тестах тренажёра ввод всегда корректный, поэтому проверять его здесь не нужно.
Сколько времени уходит на весь набор?
Обычно одно занятие. Лучше решить половину сегодня и половину через день, чем все подряд за вечер: распределённая практика запоминается прочнее.
Зачем числа в задаче про прямоугольник выводятся с подписью?
Подпись тренирует вывод нескольких значений через запятую. Python сам ставит между ними пробел, поэтому строка выглядит как «P = 14».
Нужно ли знать английский, чтобы называть переменные?
Хватит нескольких десятков слов: total, count, name, price. Стандарт оформления PEP 8 предлагает для имён строчные буквы и подчёркивание. Русские буквы в именах Python разрешает, но в школьных и олимпиадных решениях принято писать латиницей.