Цикл for и range в Python: как посчитать числа по условию
· 4 мин чтения СтатьяPython

Цикл for и range в Python: как посчитать числа по условию

Почему range(10, 31) не включает 31, чем % отличается от //, как работает счётчик count += 1 и где в такой задаче обычно теряют ответ.

Задача, на которой спотыкается почти каждый новичок, выглядит примерно так: пройти числа от 10 до 30 и посчитать, сколько из них делятся на 4 или состоят из одинаковых цифр. Кода в ней пять строк, а ошибиться успевают на одном из четырёх мест.

range(10, 31) — почему 31, если нужно до 30

Вторая граница в range не входит в перебор. range(10, 31) даёт числа с 10 по 30 включительно, а 31 — только точка остановки. Отсюда правило: верхняя граница пишется на единицу больше последнего нужного числа.

Самая частая ошибка здесь — написать range(10, 30) и молча потерять тридцатку. Программа не упадёт, ошибки не покажет, просто ответ будет на единицу меньше. Такие ошибки хуже падений: их нечем заметить.

% и // — два разных деления

В условии обычно встречаются оба знака, и путают их постоянно.

  • %остаток от деления. 26 % 4 даёт 2, потому что 26 = 4·6 + 2. Проверка «делится нацело» пишется как n % 4 == 0.
  • //целая часть от деления, дробь отбрасывается. 26 // 10 даёт 2.

Отсюда красивый приём: у двузначного числа n // 10 — это первая цифра, а n % 10 — вторая. Значит «обе цифры одинаковые» записывается как n // 10 == n % 10, без всякого превращения в строку.

Счётчик

Счётчик — обычная переменная, которую заводят до цикла и увеличивают внутри:

count = 0
for n in range(10, 31):
    if n % 4 == 0 or n // 10 == n % 10:
        count += 1
print(count)

Две вещи, на которых теряют ответ. Первая: count = 0 должно стоять снаружи — если занести его в цикл, счётчик будет обнуляться на каждом шаге и в конце окажется 0 или 1. Вторая: print(count) должен стоять снаружи и без отступа, иначе программа напечатает число двадцать один раз вместо одного.

or, а не and

«Делится на 4 или состоит из одинаковых цифр» — это or: достаточно, чтобы выполнилось хотя бы одно. С and засчитались бы только числа, у которых верно и то и другое, — таких в этом промежутке всего одно, 44 сюда даже не попадает.

Проверить себя просто: выпишите числа руками. Делятся на 4: 12, 16, 20, 24, 28. Одинаковые цифры: 11, 22. Пересечений нет, значит ответ — семь.

Как это отлаживать, а не угадывать

Если ответ не сходится, не переписывайте условие наугад — поставьте печать внутрь цикла и посмотрите, что программа считает подходящим:

for n in range(10, 31):
    if n % 4 == 0 or n // 10 == n % 10:
        print(n)

Список чисел перед глазами отвечает на вопрос за секунду: лишнее попало или нужное выпало. Этот приём работает в любой задаче с циклом и стоит того, чтобы войти в привычку.

Дальше

Циклы, условия и остаток от деления разобраны в первых уроках курса «Python», и они открыты без регистрации: условия и логика — про if, and и or, циклы — про for, range и счётчики. Задания там выполняются прямо в браузере, ставить ничего не нужно.

А если вы ещё выбираете, с какого языка начинать, — сравнение есть в статье Python или JavaScript: что учить первым.

Курс «Python» От первой строки до своих функций — с заданиями, которые выполняются прямо в браузере.
Открыть курс

Ещё в блоге

Новый курсПлатформа Курс SQL переписан заново — восемнадцать уроков и настоящая база в браузере Курс SQL переписан целиком: восемнадцать уроков, домашняя работа к каждому, контрольная и три подачи — для аналитика, разработчика и тестировщика. · 5 мин чтения Новый курсПлатформа «1С: запросы и отчёты» переписан заново — восемнадцать уроков с нуля Курс о запросах 1С и компоновке переписан целиком: восемнадцать уроков, домашняя работа к каждому, контрольная и три подачи под разную работу. · 4 мин чтения Новый курсПлатформа Английский переписан заново — и теперь он звучит Курс английского переписан целиком: шестнадцать уроков, домашняя работа к каждому, контрольная. Каждое слово можно послушать, а часть заданий — на слух. · 4 мин чтения Новый курсПлатформа «ИИ на практике» переписан заново: шестнадцать уроков, домашние работы и контрольная Курс про нейросети переписан целиком: как устроена модель, как составить запрос, как проверять ответы, картинки, звук, агенты и обман. Примеры — под вашу задачу. · 5 мин чтения