← Все вопросы

Зачем брать остаток по модулю, чтобы число «зацикливалось» (часы, дни недели)?

Задан 28 месяцев назад372 просмотров2 ответа
5

Часто вижу % n, чтобы что-то «крутилось по кругу» — например часы после 23 снова к 0, или номер дня недели. Не пойму, как % это делает. Можете объяснить на простом примере?

2 ответа

10
✓ Принятый ответ — помог автору

% n всегда даёт результат от 0 до n-1, поэтому числа как бы «заворачиваются» обратно. Это и есть зацикливание.

Пример с часами (24-часовой формат): сейчас 22:00, прибавим 5 часов — должно быть 3:00, а не 27:00.

hour = 22
result = (hour + 5) % 24
print(result)  # 3

То же с днями недели (0-6): сегодня день 5, через 4 дня —

day = 5
print((day + 4) % 7)  # 2

Как только сумма дорастает до n, остаток сбрасывает её обратно к 0. Именно поэтому % идеально подходит для всего, что движется по кругу.

3

Тот же трюк используют, чтобы взять «каждый k-й элемент по кругу» в списке: индекс i % len(lst) никогда не выйдет за границы и начнёт сначала. Очень удобно, когда счётчик растёт, а список конечный.

Ваш ответ

Войдите, чтобы ответить на вопрос.