Назовем маской числа последовательность цифр, в которой также могут встречаться следующие символы,
– символ «?»означает ровно одну произвольную цифру
– символ «*»означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность
Среди натуральных чисел, не превышающих найдите все числа, соответствующие маске ?4*2?6, кратных 126 и не кратных 19. В ответе запишите все найденные числа в порядке возрастания через пробел.
Решение через fnmatch
# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 126, начиная с числа кратного 126, для того чтобы проходиться по числам кратным 126
for i in range(14238,10**6 + 1,126):
# fnmatch — функция, сравнивающая строку с указанной маской
# Возвращает True, если строка подходит к маске
if fnmatch(str(i), ’?4*2?6’) and i % 19 != 0:
print(i)
Решение через срезы
# для оптимизации делаем цикл с шагом 126, начиная с числа кратного 126, для того чтобы проходиться по числам кратным 126
for x in range(14238,10**6+1,126):
n = str(x)
if n[1] == ’4’ and n[-1] == ’6’ and n[-3] == ’2’ and x % 19 != 0: # проверяем, что число удовлетворяет маске и при не кратно 19
print(x)