Ответ
Основной подход для решения этой задачи — перебор чисел в диапазоне с последующим преобразованием каждого числа в строку для удобной проверки наличия нужной цифры.
Рассмотрим на примере подсчета чисел с цифрой 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 из-за своей краткости и выразительности.