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