Информатика · тема 6 из 13 · ОГЭ № 6, 15 · ЕГЭ № 17, 24–27

Программирование на Python

Циклы, строки, списки и разбор чужого кода: всё, что нужно для заданий «что выведет программа» и для решения ЕГЭ-задач перебором.

25 мин чтенияОГЭЕГЭ16 заданий

Коротко

главное за 30 секунд
  1. range(a, b, c): от a до b−1 с шагом c; b не входит
  2. Целочисленное деление //, остаток %, степень **
  3. Срез s[a:b] — от a до b−1; s[::-1] — строка задом наперёд; s[-3:] — последние три символа
  4. while n > 0: n % 10 — последняя цифра, n //= 10 — отбросить её
  5. Перебор + условие + счётчик решают большинство заданий ЕГЭ 17, 25, 26

Циклы и арифметика

for i in range(a, b, c) перебирает $i = a, a+c, a+2c, \dots$ пока $i \lt b$. Цикл while выполняется, пока условие истинно.

s = 0
for i in range(1, 6):
    s += i * i
print(s)      # 1 + 4 + 9 + 16 + 25 = 55
ВыражениеЗначение
17 // 53
17 % 52
17 / 53.4 (всегда дробное)
−17 // 5−4 (округляет вниз!)
2 ** 532
Ловушка. range(2, 20, 3) даёт 2, 5, 8, 11, 14, 17 — число 20 не входит и даже 19 не достигается: шаг 3 «перескакивает».
Проверь себя. Сколько раз выполнится тело цикла for i in range(2, 20, 3)?

Ответ: 6

024681012141618202225811141720начало 2, шаг 3, конец 20 (не включается)
Рис. 1. range(2, 20, 3) даёт 2, 5, 8, 11, 14, 17: конец (20) не входит

Строки и списки

Нумерация с нуля. Срез s[a:b] берёт символы с номерами от $a$ до $b-1$. Отрицательные индексы считают с конца.

s = "информатика"
print(s[2:6])    # форм
print(s[-3:])    # ика
print(len(s))    # 11
a = [3, 1, 4, 1, 5, 9, 2, 6]
a.sort()
print(a[2])      # 2  (список стал 1 1 2 3 4 5 6 9)
Метод sort() меняет сам список, а sorted(a) возвращает новый. Список [x*x for x in range(5) if x % 2 == 0] — «генератор списка»: получится [0, 4, 16].
К0-6О1-5М2-4П3-3О4-2Т5-1s[1:4] → «ОМП»s[::-1] → «ТОПМОК»сверху — индексы слева направо, снизу — отрицательные
Рис. 2. Индексы строки «КОМПОТ»: срез s[1:4] берёт индексы 1, 2, 3 (конец не включается); s[::-1] — строка задом наперёд

Цифры числа и делители

n = 1234
s = 0
while n > 0:
    s += n % 10    # последняя цифра
    n //= 10       # убираем её
print(s)           # 10

Число делителей считаем циклом: d = sum(1 for k in range(1, n + 1) if n % k == 0). Для чисел до нескольких миллионов перебирают $k$ только до $\sqrt{n}$, учитывая пары $(k,\ n/k)$.

Типичное ЕГЭ-25. Сколько чисел из отрезка [1000; 1100] имеют ровно 4 делителя? Перебираем $n$, считаем делители, увеличиваем счётчик: ответ 23.

В заданиях-перебиралках запускайте программу на маленьком примере из условия и сверяйте с ним — это ловит 90% ошибок.
347n // 10 = 34n % 10 = 7while n > 0: d = n % 10 n //= 10цикл снимает цифры справа налево
Рис. 3. Цифры числа: n % 10 — последняя цифра, n // 10 — число без последней цифры

Как читать чужой код

Заведите таблицу значений переменных и выполняйте программу по шагам. Обращайте внимание на: границы range, различие = и ==, отступы (тело цикла/условия), порядок операций.

s = 0
i = 1
while s < 50:
    s += i
    i += 2
print(s, i)    # 64 17  (суммы 1, 4, 9, …, 64 — квадраты)
Практика

Закрепите тему: 16 заданий для ОГЭ и ЕГЭ

От простых к сложным: базовый уровень — 5, повышенный — 9, высокий — 2. Мгновенная проверка, подсказки, подробные решения и тренажёр ошибок.

Решать задания по теме Флеш-карточки