Как на Python подсчитать количество чисел в заданном диапазоне, содержащих определенную цифру?

«Как на Python подсчитать количество чисел в заданном диапазоне, содержащих определенную цифру?» — вопрос из категории Алгоритмы, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основной подход для решения этой задачи — перебор чисел в диапазоне с последующим преобразованием каждого числа в строку для удобной проверки наличия нужной цифры.

Рассмотрим на примере подсчета чисел с цифрой 7 в диапазоне от 1 до 1000.

Способ 1: Компактный (Pythonic) с использованием генератора

Это наиболее лаконичный и эффективный способ. Он использует генераторное выражение внутри функции sum().

# Целевая цифра и диапазон
digit_to_find = '7'
start, end = 1, 1000

# Выражение ('7' in str(num)) вернет True или False.
# sum() трактует True как 1, а False как 0.
count = sum(digit_to_find in str(num) for num in range(start, end + 1))

print(f"Количество чисел с цифрой '{digit_to_find}' в диапазоне [{start}, {end}]: {count}")
# Вывод: Количество чисел с цифрой '7' в диапазоне [1, 1000]: 271

Почему это работает? Выражение digit_to_find in str(num) для каждого числа num возвращает булево значение (True или False). Функция sum() при работе с булевыми значениями автоматически преобразует True в 1, а False в 0, эффективно подсчитывая все вхождения.

Способ 2: Классический цикл for

Этот вариант более многословный, но может быть понятнее для новичков, так как явно показывает логику инкремента счетчика.

digit_to_find = '7'
start, end = 1, 1000
count = 0

for num in range(start, end + 1):
    if digit_to_find in str(num):
        count += 1

print(f"Количество чисел с цифрой '{digit_to_find}' в диапазоне [{start}, {end}]: {count}")
# Вывод: Количество чисел с цифрой '7' в диапазоне [1, 1000]: 271

Оба способа дают одинаковый и правильный результат. Первый способ считается более предпочтительным в Python из-за своей краткости и выразительности.