Теория:

Для решения задачи \(25\) полезно уметь пользоваться \(f\)-строками — форматированными выражениями, содержащими поля замены. Форматированные \(f\)-строки имеют вид f'<текст >{объект}< текст>'. Поля замены ограничиваются фигурными скобками, и значения в них подставляются во время выполнения программы.

 

Например, фрагменты программ

 

print('Решать задания ЕГЭ мне помогают материалы ЯКласс!'),

print(f'Решать задания ЕГЭ мне помогают материалы ЯКласс!')

 

будут выполняться одинаково, хотя в верхней строке обычное форматирование, а во второй — \(f\)-строка. Обратим на это внимание в следующем примере.

 

0-1.png

Рис. \(1\). Пример вывода

 

0-2.png

Рис. \(2\). Результат работы программы \(1\)

 

Для аккуратного форматирования придётся воспользоваться разделителем sep\(=''\)  и вставкой дополнительных пробелов в текст для того, чтобы избавиться от автоматически расставляемых пробелов на месте запятых в функции print.

 

Сравни результат работы с результатом работы \(f\)-строки:

 

0-3.png

Рис. \(3\). Пример вывода \(f\)-строки

 

0-4.png

Рис. \(4\). Результат работы программы \(2\)

  

Конечно, этим не исчерпываются возможности \(f\)-строк.

 

Рассмотрим задачу на поиск делителей числа. 

 

Пример \(1\)

 

Для некоторого случайного числа в интервале \([4,12300]\) подсчитай количество нетривиальных делителей и выведи их.

 

Решение

 

1-1.png

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

 

1-2.png

Рис. \(6\). Результат работы программы \(3\)

 

Обрати внимание на оформление вывода. Результаты работы программы форматированы как \(f\)-строки. В качестве объекта в фигурных скобках записана стандартная функция len от другой функции mult. Одна из этих функций составлена пользователем и описана здесь же в программе. Кроме использования вычислений в \(f\)-строке мы также можем форматировать нужные нам строки.

 

Пример \(2\)

 

Даны символы e, c, t, f, j, k, y. Сколько различных имён файлов, соответствующих маске \(1?23.?x?\), можно составить из предложенных символов? Сколько из них будут иметь расширение txt или exe?

 

2-1.png

Рис. \(7\). Программа \(2\)

 

Обрати внимание: для контроля за работой программы мы вывели на печать имена файлов с заданными расширениями.

 

2-2.png
Рис. \(8\). Результат работы программы \(4\)
 
Разбор досрочного варианта \(2022\)
 

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

  • символ «?» означает ровно одну произвольную цифру;
  • символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих \(10**~9\), найди все числа, соответствующие маске \(12345?6?8\) и делящиеся на \(17\) без остатка.
В ответе запиши в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на \(17\).
 
Здесь полем замены будут цифры, занимающие места «?».
 
d1.png
Рис. \(9\). Программа \(3\)
 
d2.png
Рис. \(10\). Результат работы программы \(5\)
 

Для решения задач с применением масок числа полезно знать работу функции product модуля itertools.

В условии задачи досрочного варианта упоминается, что в маске может находиться «*», а это набор символов любой длины, в том числе и нулевой.

Функция product модуля itertools сформирует нам необходимую комбинацию символов для замены «*».

Рассмотрим пример её работы.

 

Пример \(3\)

 

Составь все возможные пары из элементов строк \('0123'\) и \('abcd'\) — такие, чтобы первый элемент был из числовой строки, а следующий — из текстовой. (Множество таких пар элементов называется декартовым произведением первой и второй из заданных строк.)

 

3-1.png

Рис. \(11\). Программа \(4\)

 

Мы получили список, состоящий из кортежей, первый элемент которых — из числовой строки, а второй — из текстовой.

 

3-2.png

Рис. \(12\). Результат работы программы \(6\)

 

Но для вставки вместо «*» нам нужно преобразовать кортежи, из которых состоит список, в строки.

 

Пример \(3A\)

 

3-3.png
 
Метод  join преобразовал кортежи в строки.
 
3-4.png
Рис. \(13\). Результат работы программы \(7\)
 
Если необходимо составить комбинации пар, или троек, или иного количества символов одного множества, то необходимо задать параметр repeat для функции product.
 
Пример \(3B\)
 
Составь таблицу истинности логической функции
 
((xy)(zw))(xw).
 
3-5.png
Рис. \(14\). Программа \(5\)
 
3-6.png
Рис. \(15\). Результат работы программы \(8\)
 
Пример \(3C\)
 
3-7.png
Рис. \(16\). Программа \(6\)
 
3-8.png
Рис. \(17\). Результат работы программы \(9\)
 
Вот эти строки уже можно вставлять на место «*».
 
Рассмотрим ещё одно задание из ЕГЭ прошлых лет.
 
Пример \(4\)
 
Определи, какое из указанных имён файлов удовлетворяет маске \('?vi*r.?xt'\).
 
1) vir.txt. 
2) ovir.txt.
3) ovir.xt.
4) virr.txt.
 
Задание решалось вручную, и мы можем составить программу и сопоставить ответ, полученный программой, с ручными расчётами.
 
4-1.png
Рис. \(18\). Программа \(7\)
Источники:
Изображения. © ЯКласс.