Программа курса:
Разбор задачи: Самоделящиеся числа
Предложенный нами код решения:
def self_dividing_numbers(left: int, right: int) -> list:
"""
:param left: Начало диапазона (включительно).
:param right: Конец диапазона (включительно).
:return: Список самоделящихся чисел в диапазоне [left, right].
"""
return [
num for num in range(left, right + 1)
if all(d != '0' and num % int(d) == 0 for d in str(num))
]
Подробное объяснение кода
return [
num for num in range(left, right + 1) # Итерируем числа в заданном диапазоне
if all(d != '0' and num % int(d) == 0 for d in str(num)) # Условие фильтрации
]
Разберем каждую часть:
range(left, right + 1):- Генерирует все числа в диапазоне от
leftдоrightвключительно.
- Генерирует все числа в диапазоне от
- Генератор списка:
[num for num in range(...)]:- Формирует итоговый список, добавляя в него только те числа, которые проходят проверку в блоке
if.
- Формирует итоговый список, добавляя в него только те числа, которые проходят проверку в блоке
str(num):- Преобразует число в строку, чтобы можно было итерировать по его цифрам.
all(...):- Проверяет, что все условия внутри выполнены:
d != '0':- Убедиться, что цифра не равна
'0'. Если в числе есть 0, оно автоматически не является самоделящимся, так как деление на 0 невозможно.
- Убедиться, что цифра не равна
num % int(d) == 0:- Проверяет, делится ли число
numна цифруdбез остатка.
- Проверяет, делится ли число
- Проверяет, что все условия внутри выполнены:
Пример работы функции
Пример 1:
left = 1 right = 22- Диапазон:
[1, 22]. - Проверяем каждое число:
- 1 → делится на 1.
- 2 → делится на 2.
- ...
- 12 → делится на 1 и 2.
- 22 → делится на 2 и 2.
- Результат:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22].
- Диапазон:
Пример 2:
left = 47 right = 85- Диапазон:
[47, 85]. - Проверяем каждое число:
- 48 → делится на 4 и 8.
- 55 → делится на 5 и 5.
- ...
- 77 → делится на 7 и 7.
- Результат:
[48, 55, 66, 77].
- Диапазон:
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии