Введение

Python — один из самых удобных языков для ЕГЭ по информатике: синтаксис короткий, код легко читать, а встроенных средств хватает для большинства типовых вычислений.

Многие задания экзамена можно решить программой полностью или использовать код для проверки рассуждений. Особенно полезны условия, циклы, строки, списки и чтение данных из файлов.

11

1. Установка Python и выбор среды

Для работы нужен интерпретатор Python 3 и программа, в которой удобно писать и запускать код. Для первых шагов достаточно IDLE, которая устанавливается вместе с Python. PyCharm удобнее для больших файлов и проектов.

1
  1. Скачай Python 3 с официального сайта python.org.
  2. При установке отметь добавление Python в PATH, если такая настройка показана.
  3. Открой IDLE или создай обычный файл с расширением .py в PyCharm.
  4. Введи код, сохрани файл и запусти его. В IDLE для этого обычно используют Run → Run Module или клавишу F5.

Первая программа

Пользователь вводит: Саша

name = input('Как тебя зовут? ')
print('Привет,', name)

Результат:

Привет, Саша

input() читает введённый текст. Если мы хотим ввести число, результат нужно преобразовать в int:

int(input())

print() выводит результат. Код выполняется сверху вниз.

Файл программы. Сохраняй код в файле с расширением .py, например task.py. Не называй файл math.py, string.py или именем другой библиотеки: это может помешать импорту.

2. Переменные и типы данных

Переменная — имя, связанное со значением. Знак = выполняет присваивание: Python вычисляет правую часть и сохраняет результат под именем слева.

score = 80
score = score + 5
name = 'Лена'

print(name, score)

Результат:

Лена 85

Не перепутай: = присваивает значение, а == сравнивает два значения.

Главные простые типы данных

1
ТипЧто хранитПримеры
intцелые числа52, -190, 0
floatвещественные числа3.14, -0.5
strтекст'ЕГЭ', '123'
boolистина или ложьTrue, False

Коллекции

ТипСвойствоПример
listизменяемая последовательность[2, 4, 6]
tupleнеизменяемая последовательность(2, 4, 6)
setуникальные элементы{1, 2, 3}
dictпары ключ → значение{'math': 90}

Правильное создание. list(2, 4, 6) не работает. Нужен литерал [2, 4, 6] или преобразование другой коллекции: list((2, 4, 6)).

Проверка и преобразование типа

x = '42'

print(type(x))

n = int(x)

print(n + 8)
print(str(n) + ' баллов')

Результат:

<class 'str'>
50
42 баллов
ФункцияРезультат
int('42')целое число 42
float('2.5')вещественное число 2.5
str(42)строка '42'
bool(0)False; большинство ненулевых значений дают True

Ввод чисел

Результат input() всегда является строкой. Перед вычислениями введённые числа обычно преобразуют.

Если введены числа 5 и 7:

a = int(input())
b = int(input())

print(a + b)

Результат:

12

3. Арифметические операции

ОперацияЗнакПримерРезультат
сложение+7 + 512
вычитание-7 - 52
умножение*7 * 535
обычное деление/7 / 51.4
целочисленное деление//7 // 51
остаток от деления%7 % 52
возведение в степень**2 ** 532

Про //. Операция // возвращает результат деления, округлённый вниз. Для положительных чисел это совпадает с отбрасыванием дробной части: 7 // 5 == 1.

1
print(2 + 3 * 4)
print((2 + 3) * 4)

Результат:

14
20

Частное и остаток

Пара // и % часто нужна в задачах на цифры, время и разбиение на группы.

minutes = 137

hours = minutes // 60
rest = minutes % 60

print(hours, rest)

Результат:

2 17

Сокращённое присваивание

x = 5

x += 2    # x = x + 2
x *= 3    # x = x * 3

print(x)

Результат:

21

Операции со строками

Для строк + означает конкатенацию — соединение строк, а * с целым числом повторяет строку.

Вычитать и делить строки нельзя.

print('ЕГ' + 'Э')
print('ха' * 3)
print(4 * '-')

Результат:

ЕГЭ
хахаха
----

Тип определяет результат: '5' + '7' даёт '57', а int('5') + int('7') даёт 12.# 4. Строки и срезы

Строка str — неизменяемая последовательность символов. Символы нумеруются с нуля, а отрицательные индексы считают с конца.

1
s = 'Информатика'

print(s[0])
print(s[1])
print(s[-1])
print(len(s))

Результат:

И
н
а
11

Граница строки. Допустимы индексы от 0 до len(s) - 1. Обращение к s[len(s)] вызовет IndexError.

Срез

Срез записывается как:

s[start:stop:step]

Начало включается, правая граница stop не включается. Любую часть можно опустить.

ВыражениеРезультатСмысл
s[:4]'Инфо'первые четыре символа
s[4:8]'рмат'индексы 4, 5, 6, 7
s[-4:]'тика'последние четыре символа
s[::2]'Ифраиа'каждый второй символ
s[::-1]'акитамрофнИ'строка в обратном порядке

Строки неизменяемы

Нельзя присвоить новое значение отдельному символу:

s[0] = 'и'

Это вызовет ошибку. Можно собрать новую строку:

s = 'Кот'
s = 'Р' + s[1:]

print(s)

Результат:

Рот

Перебор символов

word = 'ЕГЭ'

for ch in word:
    print(ch)

Результат:

Е
Г
Э

5. Булева логика

Сравнение возвращает логическое значение True или False. Из сравнений составляют условия для ветвлений и циклов.

ПроверкаОператорПример
равно==a == b
не равно!=a != b
больше / меньше> / <a > b
не меньше / не больше>= / <=a >= b
принадлежитin'a' in word

and, or, not

ОперацияКогда результат TrueПример
A and Bистинны обе частиage >= 14 and age < 18
A or Bистинна хотя бы одна частьx < 0 or x > 100
not Aвыражение A ложноnot finished
a = 10
b = 21
ok = True

print(a == b)
print(a != b)
print(a < b and ok)
print(a > b or b > a)
print(not ok)

Результат:

False
True
True
True
False

Порядок вычисления

Сначала выполняется not, затем and, затем or.

В сложных выражениях ставь скобки: так смысл условия виден сразу.

x = 7

print((x % 2 == 1) and (x > 0))

Результат:

True

6. Условный оператор if

Условный оператор выбирает один из вариантов действий. Python проверяет ветки сверху вниз и выполняет первую подходящую.

score = 72

if score >= 80:
    print('оценка 5')
elif score >= 60:
    print('оценка 4')
else:
    print('оценка 3 или 2')

Результат:

оценка 4
1
ЧастьНазначение
ifпервая обязательная проверка
elifдополнительная проверка; веток может быть несколько
elseдействия, если предыдущие условия ложны; условие не пишется

Логические переменные в условии

Если переменная уже содержит True или False, сравнение с True обычно не нужно.

passed = True

if passed:           # вместо passed == True
    print('Поздравляю!')

if not passed:       # вместо passed == False
    print('Попробуй ещё')

Результат:

Поздравляю!

Отступы — часть синтаксиса

1

После if, elif и else ставится двоеточие. Тело ветки сдвигается вправо обычно на 4 пробела.

Когда отступ закончился, закончился и блок.

x = 5

if x > 0:
    print('положительное')
    print('эта строка внутри if')

print('эта строка выполнится всегда')

Результат:

положительное
эта строка внутри if
эта строка выполнится всегда

Tab и пробелы. Редактор может превращать Tab в 4 пробела. Главное — не смешивать в одном файле разные виды отступов и сохранять одинаковую глубину блока.

7. Циклы for и while

Цикл while

while повторяет блок, пока условие остаётся истинным. В теле цикла должно меняться значение, от которого зависит условие, иначе цикл может стать бесконечным.

1
score = 0

while score < 5:
    print(score, end=' ')
    score += 1

Результат:

0 1 2 3 4

Правая граница. Если условие score < 5, число 5 уже не выводится. Чтобы вывести значения от 0 до 100 включительно, нужно score <= 100.

Цикл for

for по очереди берёт элементы последовательности: диапазона, строки, списка, кортежа и других объектов.

1
for item in [1, 3, 5]:
    print(item, end=' ')

Результат:

1 3 5

Функция range

range(start, stop, step) создаёт целочисленный диапазон. Правая граница stop не включается.

1
ЗаписьЗначения
range(5)0, 1, 2, 3, 4
range(3, 6)3, 4, 5
range(1, 8, 2)1, 3, 5, 7
range(5, 0, -1)5, 4, 3, 2, 1

Накопители

В циклах часто используют сумму, количество, максимум или строку-результат. Начальное значение зависит от задачи.

total = 0
count = 0

for x in [4, -2, 7, 0, 5]:
    if x > 0:
        total += x
        count += 1

print(total, count)

Результат:

16 3

break и continue

break завершает ближайший цикл.

continue сразу переходит к следующему повторению.

for x in [3, -1, 5, 0, 8]:
    if x < 0:
        continue

    if x == 0:
        break

    print(x, end=' ')

Результат:

3 5

8. Списки и генераторы списков

Список list — изменяемая упорядоченная коллекция. В нём могут храниться значения разных типов, но в экзаменационных задачах чаще встречаются списки чисел или строк.

1
a = [1, 3, 5]

print(a[0], a[-1])

a[1] = 100
a.append(7)

print(a)

Результат:

1 5
[1, 100, 5, 7]

Сложение и умножение списков

a = [1, 2, 3]
b = [4, 5]

print(a + b)
print(b * 3)

Результат:

[1, 2, 3, 4, 5]
[4, 5, 4, 5, 4, 5]

Перебор списка

nums = [4, 7, 10]

for x in nums:
    print(x * 2, end=' ')

Результат:

8 14 20

Генератор списка

Генератор списка создаёт новый список по короткому правилу. Слева пишется значение для добавления, затем цикл, а необязательное условие if фильтрует элементы.

1
squares = [x * x for x in range(1, 6)]
evens = [x for x in range(20) if x % 2 == 0]

print(squares)
print(evens)

Результат:

[1, 4, 9, 16, 25]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Функция map

map() применяет указанную функцию к каждому элементу последовательности.

Общая запись:

map(функция, последовательность)

Например, input().split() возвращает список строк. С помощью map(int, ...) каждую строку можно преобразовать в целое число.

Если введено:

10 20 30
parts = input().split()
nums = list(map(int, parts))

print(nums)

Результат:

[10, 20, 30]

Сама функция map() возвращает не готовый список, а перебираемый объект. Если нужен список, результат оборачивают в list().

Если количество значений известно, их можно сразу записать в переменные:

x, y = map(int, input().split())

print(x + y)

Результат:

12

Важно. В map() передаётся имя функции без вызова: map(int, parts) — правильно, а map(int(), parts) — ошибка.

Чтение нескольких чисел

Если введено:

10 20 30
nums = [int(x) for x in input().split()]

print(nums)

Результат:

[10, 20, 30]

То же преобразование можно записать генератором списка. Обе записи правильные, но map(int, ...) короче и часто используется при чтении чисел в заданиях ЕГЭ.

9. Функции

Функция — именованный блок команд. Функции убирают повторение, делят программу на понятные части и позволяют отдельно проверять вычисления.

def area(a, b):
    result = a * b
    return result

print(area(4, 7))

Результат:

28
ЧастьСмысл
defначало определения функции
areaимя функции
a, bпараметры — входные данные
returnвозвращает результат и завершает функцию

Функция без return

Если return не указан, функция возвращает специальное значение None. Она всё равно может печатать текст или изменять переданный список.

def hello(name):
    print('Привет,', name)

result = hello('Маша')

print(result)

Результат:

Привет, Маша
None

return завершает функцию

def divide(a, b):
    if b == 0:
        return 'Делить на ноль нельзя'

    return a / b

print(divide(4, 2))
print(divide(42, 0))

Результат:

2.0
Делить на ноль нельзя

После выполненного return оставшиеся строки функции уже не запускаются.

Локальные переменные

Переменная, созданная внутри функции, обычно доступна только в этой функции.

def calc(x):
    temp = x * 2
    return temp + 1

print(calc(5))

Результат:

11

10. Функции и методы строк и списков

Функцию вызывают как len(a), а метод принадлежит объекту и вызывается через точку: a.append(x) или s.split().

Общие встроенные функции

ФункцияЧто делаетПример
len(x)длина строки или коллекцииlen('кот') → 3
sum(a)сумма чиселsum([2, 3, 4]) → 9
min(a) / max(a)минимум / максимумmax([2, 9, 4]) → 9
sorted(a)новый отсортированный списокsorted([3, 1]) → [1, 3]
abs(x)модуль числаabs(-7) → 7
round(x, n)округление до n знаковround(3.1415, 2) → 3.14

Методы списков

МетодЧто делает
a.append(x)добавляет x в конец
a.extend(items)добавляет несколько элементов
a.insert(i, x)вставляет x перед индексом i
a.pop() / a.pop(i)удаляет и возвращает последний элемент или элемент i
a.remove(x)удаляет первое значение x
a.index(x)индекс первого значения x
a.count(x)количество значений x
a.sort()сортирует сам список
a.reverse()разворачивает сам список
a = [3, 1, 2]

b = sorted(a)
a.sort(reverse=True)

print(a)
print(b)

Результат:

[3, 2, 1]
[1, 2, 3]

sort и sorted. a.sort() изменяет исходный список и возвращает None. sorted(a) не меняет a, а создаёт новый список.

Основные методы строк

line = '10 20 30'

parts = line.split()
nums = list(map(int, parts))

print(nums)
print('-'.join(parts))

Результат:

[10, 20, 30]
10-20-30
МетодЧто делаетПример
.lower() / .upper()меняет регистр в новой строке'Py'.lower() → 'py'
.strip()убирает пробелы по краям' x '.strip() → 'x'
.count(x)считает вхождения'мама'.count('м') → 2
.replace(a, b)заменяет фрагменты'2025'.replace('5', '6')
.find(x)индекс первого вхождения или -1'кот'.find('о') → 1
.index(x)индекс вхождения или ошибка'кот'.index('о') → 1
.split(sep)разбивает строку и возвращает список'a,b'.split(',')
sep.join(items)соединяет строки через разделитель'-'.join(['a', 'b'])

Строковые методы. Строки неизменяемы. Метод s.upper() создаёт новую строку, поэтому результат нужно сохранить: s = s.upper().

11. Множества и словари

Множество set

Множество хранит только уникальные элементы. Порядок не гарантирован, индексов нет.

Главное преимущество — быстрая проверка принадлежности.

values = [3, 1, 3, 2, 1]
unique = set(values)

print(len(unique))
print(2 in unique)

Результат:

3
True

Пустое множество. set() создаёт пустое множество. Запись {} создаёт пустой словарь.

ОперацияСмысл
s.add(x)добавить элемент
s.discard(x)удалить элемент, если он есть
a \| bобъединение множеств
a & bпересечение множеств
a - bэлементы a, которых нет в b

Словарь dict

Словарь хранит пары ключ: значение. Ключи уникальны; по ключу можно получить или изменить значение.

scores = {
    'math': 92,
    'inf': 100
}

print(scores['inf'])

scores['rus'] = 86
scores['math'] = 95

print(scores.get('phys', 0))

Результат:

100
0

Перебор словаря

for subject, score in scores.items():
    print(subject, score)

Результат:

math 95
inf 100
rus 86

Методы keys(), values() и items() возвращают ключи, значения и пары соответственно.

12. Работа с текстовыми файлами

В заданиях с файлами данные обычно лежат рядом с программой. Имя или путь передают функции open() в кавычках.

Безопасное открытие

Конструкция with автоматически закрывает файл после чтения.

with open('data.txt', encoding='utf-8') as f:
    text = f.read()

print(text)
СпособЧто возвращает
f.read()весь оставшийся текст одной строкой
f.readline()следующую строку
f.readlines()список оставшихся строк
for line in fпо очереди перебирает строки без загрузки всего файла

Несколько чисел в каждой строке

with open('data.txt') as f:
    for line in f:
        nums = [int(x) for x in line.split()]
        print(nums)

Одно число в каждой строке

with open('data.txt') as f:
    nums = [int(line) for line in f]

print(max(nums))

Пропустить заголовок

with open('data.txt') as f:
    next(f)

    for line in f:
        x, y = map(int, line.split())
        print(x, y)

Десятичная запятая

x = float('12,5'.replace(',', '.'))

print(x)

Результат:

12.5

Путь Windows. Обычный обратный слеш обозначает спецсимвол. Используй raw-строку r'C:\ege\data.txt' или прямые слеши: 'C:/ege/data.txt'.

13. Библиотеки и модули

Модуль — файл с готовым кодом. Импорт позволяет использовать его функции, классы и константы.

Большинство полезных для ЕГЭ модулей входит в стандартную библиотеку Python.

Три формы импорта

import math

print(math.sqrt(25))
print(math.pi)

from math import gcd

print(gcd(18, 24))

Результат:

5.0
3.141592653589793
6
ЗаписьОсобенность
import mathпонятно, откуда взято имя: math.sqrt(...)
from math import sqrtможно писать просто sqrt(...)
from math import *импортирует много имён; в больших программах лучше избегать

Полезные модули

МодульДля чего пригодится
mathкорни, НОД, факториал, константы и математические функции
itertoolsперестановки, сочетания и декартовы произведения
stringготовые наборы букв и цифр
ipaddressработа с IP-адресами и сетями

Про numpy. numpy — сторонняя библиотека и обычно не нужна для базовых решений ЕГЭ. Надёжнее уметь решать задачи стандартными средствами Python.

14. Полезные приёмы

Системы счисления

bin, oct и hex переводят целое число в строку с префиксом системы счисления.

Обратное преобразование выполняет int(строка, основание).

x = 35

print(bin(x))
print(oct(x))
print(hex(x))
print(int('100011', 2))

Результат:

0b100011
0o43
0x23
35

f-строки

Внутри фигурных скобок вычисляется выражение, а результат вставляется в текст.

name = 'Лена'
score = 88

print(f'{name}: {score} баллов')

Результат:

Лена: 88 баллов

Длинные условия

Лучше переносить длинное выражение внутри круглых скобок. Обратный слеш для переноса допустим, но скобки читаются надёжнее.

if (a > 0
    and b > 0
    and (a + b) % 2 == 0):

    print('условие выполнено')

Распаковка

Если количество значений известно, список или результат split() можно сразу разложить по переменным.

Если введено:

5 7
x, y = map(int, input().split())

print(x + y)

Результат:

12