11.Библиотека fnmatch
В одном из заданий ЕГЭ необходимо сверять некоторые значения с так называемыми масками (регулярными выражениями). Примеры регулярных выражений (масок):
- "123*094" - данной маске подойдут строки с символами "123" в начале, с любым количеством любых символов в середине ("sglfd;fdfg;34r" например) или отсутствие символов, после с символами "094" в конце;
- "123?094" - данной маске подойдут строки с символами "123" в начале, с любым символом
("f" например), после с символами "094" в конце.
Для проверки строк на соответствие маске мы воспользуемся функцией fnmatch из одноимённой библиотеки:
from fnmatch import fnmatch
mask = "325?12*124"
example1 = "32512124"
example1 = "3251012123021124"
example1 = "325912124"
example1 = "325712894dsd124"
print(fnmatch(example1, mask)) # False
print(fnmatch(example2, mask)) # False
print(fnmatch(example3, mask)) # True
print(fnmatch(example4, mask)) # True
Разберём одно задание из ЕГЭ:
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*».
Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, не превышающие 10^10, которые соответствуют маске 1?954*21 и при этом без остатка делятся на 3023.
В ответе запишите все найденные числа в порядке возрастания.
Решение:
from fnmatch import fnmatch
Вывод:
for x in range(0, 10 **
10, 2023):
if fnmatch(str(x), '1?954*21'):
print(x)
1895421
1295437121
1395498421
1795441321
Это простой задание, не все подобные задания решаются так просто.
Тесты для данного блока не предусмотрены.
Задания в практике представлены для демонстрации, лучше решать задания из других источников!