В этой статье разберём несколько полезных конструкций Python, которые часто встречаются в заданиях ЕГЭ по информатике и помогают писать более короткий и понятный код. Посмотрим, как работают глобальные и локальные переменные, как удобно хранить данные в матрицах, зачем нужна конструкция for else, а также как использовать функции all(), any() и f-строки.
Термины, которые будем использовать: глобальная переменная, локальная переменная, матрица, f-строка.
Глобальные и локальные переменные
Переменные в Python делятся на два типа в зависимости от того, где они созданы.
Локальные переменные — это переменные, которые существуют только внутри определённого блока кода.
Глобальные переменные — это переменные, которые существуют во всей программе и доступны из любого места. Мы используем global для того, чтобы отметить глобальные переменные внутри функций.
| Признак | Локальная переменная | Глобальная переменная |
|---|---|---|
| Где создаётся | Внутри функции | В основном коде, вне функций |
| Где видна | Только внутри своей функции | Во всей программе (во всех функциях) |
| Время жизни | Создаётся при вызове функции, уничтожается при её завершении | Существует всё время работы программы |
| Как изменить из функции | Изменяется напрямую | Передать как аргумент, вернуть результат |
Действия со списками
- Списки можно складывать.
Пример:
a = [5]
a += [2, 3]
print(a) #выводит [5, 2, 3] - extend() добавляет элементы одного списка в конец другого.
- reverse() изменяет порядок элементов списка на обратный.
Создание списка в одну строку
map — функция, возвращающая ссылку на map object. Она принимает в качестве параметров два аргумента: имя функции, которая применяется ко второму аргументу, и итерируемый объект, к элементам которого применяется функция.
list превращает итератор в список (если от строки, то список символов, если с map, то список цифр).
Тогда:
s = ‘1 2 3 4 5’
a = list(map(int, s.split())) #создаём строку s, внутри разбиваем по пробелам и создаём массив (с помощью .split()). Чтобы каждый элемент стал числом, записываем всё в map, применяя int ко всем элементам. Получается последовательность чисел, но это ещё не список, а объект map. Поэтому, чтобы получить список, оборачиваем результат в list().
Матрица
Матрица — это прямоугольная таблица, которая используется для организации и обработки данных. В Python матрицы обычно представляют в виде списка списков (список, где каждый элемент является списком).
matrix = [[1, 2, 3], [5, 6, 7]]
В этом примере:
matrix — это список списков, матрица.
matrix[0] — первая строка матрицы: [1, 2, 3].
matrix[1] — вторая строка матрицы: [5, 6, 7].
matrix[0][0] — элемент на первой строке в первом столбце: 1.
matrix[1][2] — элемент на второй строке в третьем столбце: 7.
Как выводить элементы внутри матрицы
Элементы матрицы удобно выводить с помощью вложенного цикла: внешний цикл проходит по строкам (внешнему списку), а вложенный — по элементам внутри каждой строки.
Например:
a = [[1,2,3], [5,6,7]]
for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j])
Также матрицу можно создавать по входным данным согласно её размерности:
n = int(input())
m = int(input())
b = [[i + j for j in range(m)] for i in range(n)]
print(b)
Третья строка создаёт матрицу (список списков) b с использованием генератора списков. Рассмотрим его.
- Внешний цикл for i in range(n) перебирает n раз, где n — количество строк в матрице. В нашем случае n = 10, значит получится 10 строк.
- Внутренний цикл for j in range(m) выполняется для каждого значения i из внешнего цикла и перебирает m раз. В нашем случае m = 5, значит будет 5 столбцов.
- i + j — для каждого значения i (номер строки) и j (номер столбца) вычисляется сумма i + j, и это значение становится элементом матрицы.
Тогда:
[i + j for j in range(m)]: создаёт строку матрицы, где каждый элемент — сумма индекса строки и индекса столбца.
[[i + j for j in range(m)] for i in range(n)]: формирует всю матрицу b из созданных строк.
В результате выведется:
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8], [5, 6, 7, 8, 9], [6, 7, 8, 9, 10], [7, 8, 9, 10, 11], [8, 9, 10, 11, 12], [9, 10, 11, 12, 13]]
Конструкция for else
Конструкция for…else — это способ выполнить блок кода else после завершения цикла for, но только при условии, что цикл завершился естественным образом, то есть не был прерван оператором break.
Структура
for :
# тело цикла
if :
break # прерываем цикл при определённом условии
else:
# эта часть выполнится, если цикл не будет прерван
Функции all и any
Обе эти функции возвращают значение True или False в зависимости от того, какие значения содержатся в итерируемом объекте.
all() возвращает True, если все элементы в итерируемом объекте истинны (или если итерируемый объект пустой). Она возвращает False, если хотя бы один элемент является ложным (похоже на and).
any() возвращает True, если хотя бы один элемент в итерируемом объекте истинный. Она возвращает False, если все элементы являются ложными (похоже на or).
Пример:
a = [2,3,6,8,10]
print(all(x % 2 == 0 for x in a)) #выведет False, так как есть нечётное число 3.
print(any(x % 2 == 1 for x in a)) #выведет True, так как есть чётные числа.
Что такое f-строка
F-строка — это «умная» строка, которая сама подставляет значения переменных и выполняет вычисления внутри себя.
Представь, что обычная строка — это просто текст в блокноте, а f-строка — это живой документ, который автоматически обновляет все числа и имена.
Фигурные скобки {} — это окошко в строку, через которое ты можешь:
- вставить значение переменной,
- выполнить вычисление,
- вызвать функцию.
Также с помощью f-строк можно переводить числа из 10 сс в 2 сс, 8 сс и 16 сс:
a = 100
print(f»Число {a} в двоичной сс = {a:b}\n»
f»Число {a} в восьмеричной сс = {a:o}\n»
f»Число {a} в шестнадцатеричной сс = {a:x}\n»)
Заключение
В этой статье мы разобрали несколько приёмов Python, которые регулярно встречаются в заданиях ЕГЭ по информатике: работу с переменными, списками и матрицами, конструкцию for else, функции all() и any(), а также f-строки и базовые шаблоны генерации данных.
Эти инструменты не требуют сложного синтаксиса, но сильно упрощают решение задач и помогают писать более короткий и читаемый код. Важно не просто запомнить конструкции, а понимать, как они работают: тогда их легче применять в нестандартных заданиях.
Практика
Задание 1
Определи, сколько символов * выведет эта процедура при вызове F(35):
def F( n ):
print(’*’)
if n >= 1:
print(’*’)
F(n-1)
F(n-2)
print(’*’)
В этом задании нужно посчитать количество ‘*’. Мы бы могли создать счётчик, но при каждом новом вызове функции (например F(5) и F(7)) он будет обнуляться, и подсчёт начнётся заново. Так мы никогда не получим итоговую сумму. Поэтому мы вводим глобальную переменную, которая хранит в себе информацию о количестве всех звёздочек, полученных при вызове функций.
Ответ: 96631265.
Задание 2
Найти минимальное число от 1000 до 1000000, чтобы оно делилось на все числа от 2 до 15 включительно.
for i in range(10**3, 10**6):
for j in range(2, 16):
if i % j != 0: # если число i не делится на хотя бы одно число от 2 до 15, то прерываем цикл и переходим на следующее значение
break
else:
# в ином случае выводим i и прекращаем работу
print(i)
break
Ответ: 360360.
Задание 3
Создай визитку с помощью f-строк.
name = «Алексей»
job = «разработчик»
experience = 3
salary = 150000
# Напиши код с помощью f-строк, который выведет:
# ======= ВИЗИТКА =======
# Имя: Алексей
# Должность: разработчик
# Опыт: 3 года
# Зарплата: 150000 руб.
# =======================