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