Целые числа и арифметика в Python
Автор: Казачкин Даниил Михайлович · Обновлено
Целые числа подходят для количества предметов, индексов, баллов и времени в полных единицах. Python поддерживает обычные операции +, -, *, а также три разных вида деления: / даёт…
Целые числа подходят для количества предметов, индексов, баллов и времени в полных единицах. Python поддерживает обычные операции +, -, *, а также три разных вида деления: / даёт дробный результат, // оставляет целую часть частного, % возвращает остаток.
Часы и оставшиеся минуты
minutes = 135
hours = minutes // 60
remainder = minutes % 60
print(hours, 'ч')
print(remainder, 'мин')Результат:
2 ч
15 минРавенство minutes == hours * 60 + remainder помогает проверить вычисление. Остаток при делении на положительное число 60 всегда находится от 0 до 59. Этот же приём используется для цифр числа, циклических номеров и проверки чётности.
Приоритет и скобки
Умножение и деление выполняются раньше сложения. Поэтому среднее двух чисел записывают как (a + b) / 2, а не a + b / 2. Если порядок важен для смысла задачи, скобки делают его явным и облегчают чтение.
Путаница между / и // — типичная ошибка. Выражение 5 / 2 даёт 2.5, а 5 // 2 — 2. При отрицательных числах // округляет вниз: -5 // 2 равно -3, поэтому нельзя всегда понимать его как простое отбрасывание дробной части. Деление на ноль любым из этих операторов вызывает ZeroDivisionError.
Задача для трёх тестов
Пользователь вводит число секунд. Выведите количество полных минут и оставшихся секунд. Проверьте 125 → 2 мин 5 сек, 60 → 1 мин 0 сек и 0 → 0 мин 0 сек. Затем добавьте проверку чётности исходного числа через остаток от деления на 2. Перед запуском подпишите, какой оператор отвечает за каждую часть ответа.
Арифметический контракт
Запишите для перевода секунд два свойства: исходное число равно minutes * 60 + seconds, а остаток находится от 0 до 59. Сгенерируйте вручную тесты 0, 1, 59, 60, 61 и 3601 и проверьте оба свойства через assert. После этого намеренно замените целочисленное деление обычным и посмотрите, какой тест первым обнаружит проблему. Отдельно исследуйте отрицательное значение, но не выбирайте поведение молча: либо запретите его условием, либо зафиксируйте правило. Проверяемые свойства надёжнее одного красивого примера и переносятся на похожие задачи о часах и разрядах.
Практикум: секунды, минуты и граничные значения
Преобразуйте число секунд в полные минуты и остаток секунд. Проверьте 0, 59, 60, 61 и 3599; для каждого сначала запишите ответ вручную. Подтвердите инвариант total == minutes * 60 + seconds и диапазон остатка от 0 до 59. Затем расширьте расчёт до часов, не копируя противоречивые формулы. Отдельно решите, допускаются ли отрицательные значения, и отклоните их до деления, если они не имеют смысла в задаче.
Контрольная точка
Чем /, // и % отличаются на числе 125? Назовите тип и смысл каждого результата, а затем объясните, почему остаток дополняет целую часть до исходного значения.
Частые вопросы
Почему -5 // 2 даёт -3?
Целочисленное деление Python округляет частное вниз, а не просто отбрасывает дробную часть. Поэтому для отрицательных чисел результат отличается от округления к нулю; это важно учитывать, если отрицательный ввод допустим.