8 упражнений с переменными: ввод, арифметика, обмен и единицы

Практикумобновлено 07.10.202610 мин чтенияесть тренажёр

Задачи на переменные — первый шаг после «Привет, мир»: программа получает данные через input, хранит их под понятными именами, считает и выводит ответ. Ниже 8 упражнений с автопроверкой — от приветствия до перевода минут в часы — и разбор приёмов, на которых чаще всего ошибаются новички.

Загружаем…

Что тренируют задачи на переменные

Задачи на переменные тренируют 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 действий.

  1. Посчитайте на бумаге. Возьмите ввод из непройденного теста и выполните каждую строку вручную, записывая значения переменных в столбик.
  2. Добавьте временный print. Выведите промежуточное значение, например print(hours), и сравните с расчётом. Потом уберите лишний вывод, иначе тест не пройдёт.
  3. Сравните формат. Посмотрите на «Ожидалось» и «Получилось» посимвольно: пробелы, двоеточия и регистр букв должны совпадать.

Подсказку стоит открывать после 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 разрешает, но в школьных и олимпиадных решениях принято писать латиницей.