Теория:
Для решения задачи \(25\) полезно уметь пользоваться \(f\)-строками — форматированными выражениями, содержащими поля замены. Форматированные \(f\)-строки имеют вид f'<текст >{объект}< текст>'. Поля замены ограничиваются фигурными скобками, и значения в них подставляются во время выполнения программы.
Например, фрагменты программ
print('Решать задания ЕГЭ мне помогают материалы ЯКласс!'),
print(f'Решать задания ЕГЭ мне помогают материалы ЯКласс!')
будут выполняться одинаково, хотя в верхней строке обычное форматирование, а во второй — \(f\)-строка. Обратим на это внимание в следующем примере.
![]()
Рис. \(1\). Пример вывода

Рис. \(2\). Результат работы программы \(1\)
Для аккуратного форматирования придётся воспользоваться разделителем sep\(=''\) и вставкой дополнительных пробелов в текст для того, чтобы избавиться от автоматически расставляемых пробелов на месте запятых в функции print.
Сравни результат работы с результатом работы \(f\)-строки:
![]()
Рис. \(3\). Пример вывода \(f\)-строки

Рис. \(4\). Результат работы программы \(2\)
Конечно, этим не исчерпываются возможности \(f\)-строк.
Рассмотрим задачу на поиск делителей числа.
Пример \(1\)
Для некоторого случайного числа в интервале \([4,12300]\) подсчитай количество нетривиальных делителей и выведи их.
Решение

Рис. \(5\). Программа \(1\)

Рис. \(6\). Результат работы программы \(3\)
Обрати внимание на оформление вывода. Результаты работы программы форматированы как \(f\)-строки. В качестве объекта в фигурных скобках записана стандартная функция len от другой функции mult. Одна из этих функций составлена пользователем и описана здесь же в программе. Кроме использования вычислений в \(f\)-строке мы также можем форматировать нужные нам строки.
Пример \(2\)
Даны символы e, c, t, f, j, k, y. Сколько различных имён файлов, соответствующих маске \(1?23.?x?\), можно составить из предложенных символов? Сколько из них будут иметь расширение txt или exe?

Рис. \(7\). Программа \(2\)
Обрати внимание: для контроля за работой программы мы вывели на печать имена файлов с заданными расширениями.

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.


Для решения задач с применением масок числа полезно знать работу функции product модуля itertools.
В условии задачи досрочного варианта упоминается, что в маске может находиться «*», а это набор символов любой длины, в том числе и нулевой.
Функция product модуля itertools сформирует нам необходимую комбинацию символов для замены «*».
Рассмотрим пример её работы.
Пример \(3\)
Составь все возможные пары из элементов строк \('0123'\) и \('abcd'\) — такие, чтобы первый элемент был из числовой строки, а следующий — из текстовой. (Множество таких пар элементов называется декартовым произведением первой и второй из заданных строк.)

Рис. \(11\). Программа \(4\)
Мы получили список, состоящий из кортежей, первый элемент которых — из числовой строки, а второй — из текстовой.

Рис. \(12\). Результат работы программы \(6\)
Но для вставки вместо «*» нам нужно преобразовать кортежи, из которых состоит список, в строки.
Пример \(3A\)






