Зачем брать остаток по модулю, чтобы число «зацикливалось» (часы, дни недели)?
Часто вижу % n, чтобы что-то «крутилось по кругу» — например часы после 23 снова к 0, или номер дня недели. Не пойму, как % это делает. Можете объяснить на простом примере?
2 ответа
% 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. Именно поэтому % идеально подходит для всего, что движется по кругу.
Тот же трюк используют, чтобы взять «каждый k-й элемент по кругу» в списке: индекс i % len(lst) никогда не выйдет за границы и начнёт сначала. Очень удобно, когда счётчик растёт, а список конечный.