На уроке информатики учитель показал программу, всё было понятно. Дома открываешь редактор, а там пустой файл и мигающий курсор — и ты не знаешь, с какой строчки начать. Или начинаешь, запускаешь, а Python отвечает TypeError: can only concatenate str (not "int") to str, и это выглядит как приговор на незнакомом языке.
Так у всех. Программирование не учится чтением — оно учится набором кода руками, поэтому первые десять задач стоит не «посмотреть», а честно набрать и запустить. Каждая из них добавляет ровно один новый инструмент к предыдущим: ввод → числа → условие → цикл → список.
Ниже — эти десять задач с полным кодом и разбором: почему написано именно так, что будет, если написать иначе, и как проверить, что программа работает. Весь код в статье запущен и выдаёт ровно те ответы, что указаны. Последняя задача — настоящее задание 15.2 из ОГЭ по информатике.
Как работать с этим разбором
- Прочитай условие и сначала попробуй сам, хотя бы набросай в тетради.
- Открой решение, сравни со своим.
- Набери код руками (не копируй — при наборе замечаешь синтаксис).
- Запусти на примерах из раздела «Проверка».
- Сломай программу специально: убери
int, поменяй>на<, сдвинь отступ. Посмотри, что скажет Python. Ошибки полезнее правильных запусков.
Писать можно где угодно: в IDLE, который ставится вместе с Python с python.org, в VS Code или в любом онлайн-редакторе. Для первых десяти задач разницы нет.
| Задача | Что появляется нового |
|---|---|
| 1 | input, print, строки, f-строки |
| 2 | int(), типы данных |
| 3 | float(), арифметика, форматирование вывода |
| 4 | остаток %, if / else |
| 5 | elif, логическое and, функция max |
| 6 | целочисленное деление //, работа с цифрами |
| 7 | цикл for, range |
| 8 | накопитель (сумма и счётчик) |
| 9 | список, sum, len, цикл по элементам |
| 10 | ОГЭ 15.2: ввод в цикле, два условия |
Задача 1. Приветствие
Программа спрашивает имя и здоровается.
name = input()
print("Привет, " + name + "!")
Ввод Аня → вывод Привет, Аня!
Что здесь происходит. input() останавливает программу и ждёт, пока пользователь введёт строку и нажмёт Enter. Результат сохраняется в переменную name — это имя для ячейки памяти. print() выводит на экран, а + для строк означает «склеить».
Тот же код удобнее записать через f-строку — букву f перед кавычками, а переменные в фигурных скобках:
name = input()
print(f"Привет, {name}! Твоё имя из {len(name)} букв.")
Ввод Аня → вывод Привет, Аня! Твоё имя из 3 букв.
Внутри {} можно писать не только имя переменной, но и выражение — здесь len(name) считает длину строки. F-строки читаются лучше, чем склейка плюсами, и дальше в статье используются только они.
Совет:
input("Как тебя зовут? ")выводит подсказку перед вводом. Удобно, когда запускаешь программу сам, но на олимпиадах и в ОГЭ подсказку не пишут — проверяющая программа ждёт чистый ответ. Привыкай сразу кinput()без текста.
Задача 2. Сумма двух чисел
Программа читает два числа и выводит их сумму.
Первая попытка почти всегда такая — и она неправильная:
a = input()
b = input()
print(a + b)
Ввод 2, 3 → вывод 23. Не пять, а «двадцать три».
Причина: input() всегда возвращает строку, даже если ты ввёл цифры. А + для строк — это склейка. "2" + "3" даёт "23", всё логично.
Чтобы получить число, строку надо преобразовать функцией int():
a = int(input())
b = int(input())
print(a + b)
Ввод 2, 3 → вывод 5.
Читай запись изнутри наружу: сначала работает input() (получили строку "2"), потом int() превращает её в число 2, и уже число попадает в переменную a.
Ошибка:
int(input())упадёт сValueError, если ввестидваили2.5. Для дробных чисел нуженfloat()— про него следующая задача.
Задача 3. Площадь и периметр прямоугольника
Даны длины сторон. Найти площадь и периметр.
a = float(input())
b = float(input())
print("Площадь:", a * b)
print("Периметр:", 2 * (a + b))
Ввод 5, 3:
Площадь: 15.0
Периметр: 16.0
Два новых момента. Первый: float() читает дробное число, поэтому программа работает и со сторонами 5.5. Второй: print принимает несколько аргументов через запятую и сам ставит между ними пробел — склеивать через + не нужно, а с числом это и не сработало бы.
Если стороны дробные, вывод выходит некрасивым (16.5 превращается в 16.499999999999998 при неудачных числах). Округляем через формат в f-строке:
a = float(input())
b = float(input())
print(f"Площадь: {a * b:.2f}")
print(f"Периметр: {2 * (a + b):.2f}")
Ввод 5.5, 3:
Площадь: 16.50
Периметр: 17.00
Запись :.2f внутри фигурных скобок значит «вывести как дробное с двумя знаками после точки».
Задача 4. Чётное или нечётное
Определить, чётное ли введённое число.
n = int(input())
if n % 2 == 0:
print("Чётное")
else:
print("Нечётное")
| Ввод | Вывод |
|---|---|
| 10 | Чётное |
| 7 | Нечётное |
| 0 | Чётное |
| −7 | Нечётное |
Здесь три новые вещи, и все важные.
Оператор % — остаток от деления. 10 % 2 равно 0, 7 % 2 равно 1. Чётность — это ровно «остаток от деления на 2 равен нулю».
== вместо =. Один знак равно — присваивание («положи значение в переменную»), два — сравнение («равно ли»). Перепутать легко, Python сообщит SyntaxError.
Отступ — это синтаксис. В Python нет фигурных скобок: тело if определяется отступом в четыре пробела. Уберёшь отступ — IndentationError. Сделаешь отступ в другом количестве пробелов внутри одного блока — тоже ошибка. Нажимай Tab, редактор сам поставит четыре пробела.
Обрати внимание на −7: в Python остаток от деления отрицательного числа на 2 равен 1, поэтому программа отвечает правильно и без дополнительных проверок. В некоторых других языках это не так.
Задача 5. Наибольшее из трёх чисел
Даны три числа, вывести самое большое.
a = int(input())
b = int(input())
c = int(input())
if a >= b and a >= c:
print(a)
elif b >= c:
print(b)
else:
print(c)
Проверка на четырёх наборах:
| Ввод | Вывод |
|---|---|
| 9, 4, 7 | 9 |
| 4, 9, 7 | 9 |
| 4, 7, 9 | 9 |
| 5, 5, 5 | 5 |
Логика: если a не меньше обоих остальных — ответ a. Иначе a точно не максимум, и остаётся сравнить b и c.
Три детали, из-за которых такие программы чаще всего ломаются:
andзначит «оба условия верны»,or— «хотя бы одно». Писатьa >= b and cнельзя, каждое сравнение записывается целиком.>=, а не>. С>набор5, 5, 5провалится во все ветки и выведетc— здесь случайно правильно, но на других данных даст неверный ответ. Границы всегда проверяй отдельно.elif, а не второйif.elifпроверяется только если предыдущее условие оказалось ложным. Два независимыхifмогут сработать оба и напечатать два числа.
В настоящей программе всё это делается одной строкой:
a = int(input())
b = int(input())
c = int(input())
print(max(a, b, c))
Ввод 4, 7, 9 → вывод 9. Но на контрольной обычно просят именно разветвление — умение расписать логику руками важнее знания готовой функции.
Задача 6. Сумма цифр трёхзначного числа
Дано трёхзначное число. Найти сумму его цифр.
n = int(input())
d1 = n // 100
d2 = n // 10 % 10
d3 = n % 10
print(d1, d2, d3)
print("Сумма цифр:", d1 + d2 + d3)
Ввод 528:
5 2 8
Сумма цифр: 15
Ввод 900:
9 0 0
Сумма цифр: 9
Ключ ко всей задаче — два оператора:
| Оператор | Что делает | Пример |
|---|---|---|
// |
целочисленное деление (отбрасывает дробную часть) | 528 // 100 = 5 |
% |
остаток от деления | 528 % 10 = 8 |
/ |
обычное деление, всегда даёт дробное | 528 / 100 = 5.28 |
Разбор среднего разряда: 528 // 10 даёт 52 (отрезали последнюю цифру), затем 52 % 10 даёт 2 (взяли последнюю цифру того, что осталось). Действия идут слева направо, поэтому скобки не нужны.
Ошибка: написать
n / 100вместоn // 100. Получится5.28, и сумма цифр сойдёт с ума. Один лишний слэш решает всё.
Если разрядность числа неизвестна, перебор вручную не годится — нужен цикл while:
n = int(input())
s = 0
while n > 0:
s += n % 10
n = n // 10
print(s)
Ввод 48591 → вывод 27 (4 + 8 + 5 + 9 + 1). Программа откусывает по последней цифре, пока число не станет нулём. Запись s += n % 10 — краткая форма для s = s + n % 10.
Задача 7. Таблица умножения
Вывести таблицу умножения на введённое число от 1 до 10.
n = int(input())
for i in range(1, 11):
print(n, "x", i, "=", n * i)
Ввод 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
for i in range(1, 11) читается так: «переменная i по очереди принимает все значения из диапазона от 1 до 11, не включая 11».
Главная ловушка новичка — правая граница. range(1, 11) даёт 1, 2, …, 10. Чтобы дойти до 10, пишем 11. Проверь на маленьком примере:
for i in range(1, 5):
print(i, end=" ")
Выводит 1 2 3 4 — четвёрка есть, пятёрки нет. Параметр end=" " заменяет перевод строки на пробел, поэтому всё печатается в одну строку.
Формы range, которые пригодятся:
| Запись | Значения |
|---|---|
range(5) |
0, 1, 2, 3, 4 |
range(1, 5) |
1, 2, 3, 4 |
range(1, 10, 2) |
1, 3, 5, 7, 9 |
range(10, 0, -1) |
10, 9, 8, …, 1 |
Задача 8. Сумма чисел от 1 до N
Найти сумму всех натуральных чисел от 1 до N.
n = int(input())
total = 0
for i in range(1, n + 1):
total += i
print(total)
Ввод 100 → вывод 5050. Ввод 1 → вывод 1.
Это первая задача с накопителем — переменной, которая копит результат по кусочкам. Шаблон одинаков для всех подобных задач:
- До цикла завести переменную и положить в неё начальное значение (для суммы — 0, для произведения — 1, для счётчика — 0).
- Внутри цикла изменить её на текущем элементе.
- После цикла вывести.
Две ошибки, которые убивают такую программу:
total = 0внутри цикла. Тогда накопитель обнуляется на каждом шаге, и в конце останется только последнее число.print(total)внутри цикла. Тогда программа напечатает не один ответ, а N строк. Смотри на отступы:printдолжен быть на нулевом уровне, вровень сfor.
Ответ можно проверить формулой Гаусса: сумма от 1 до N равна N × (N + 1) / 2. Для 100 это 100 × 101 / 2 = 5050 — сходится.
Тот же шаблон, но со счётчиком вместо суммы: сколько чисел от 1 до N делятся на 3?
n = int(input())
count = 0
for i in range(1, n + 1):
if i % 3 == 0:
count += 1
print(count)
Ввод 20 → вывод 6 (это 3, 6, 9, 12, 15, 18).
Обрати внимание на два уровня отступа: if вложен в for, а count += 1 вложен в if. Каждый уровень — плюс четыре пробела.
Задача 9. Список: сколько элементов больше среднего
Дан список чисел. Найти среднее арифметическое и посчитать, сколько элементов его превышают.
numbers = [12, 5, 8, 20, 7]
average = sum(numbers) / len(numbers)
count = 0
for x in numbers:
if x > average:
count += 1
print("Среднее:", average)
print("Больше среднего:", count)
Вывод:
Среднее: 10.4
Больше среднего: 2
Проверка руками: сумма 12 + 5 + 8 + 20 + 7 = 52, элементов 5, среднее 52 / 5 = 10.4. Больше 10.4 только 12 и 20 — значит, 2. Сходится.
Список — это набор значений в квадратных скобках, пронумерованных с нуля: numbers[0] равно 12, numbers[4] равно 7. Три встроенные функции берут на себя всю рутину:
| Функция | Что делает | Здесь |
|---|---|---|
len(numbers) |
сколько элементов | 5 |
sum(numbers) |
сумма всех | 52 |
max(numbers) / min(numbers) |
наибольший / наименьший | 20 / 5 |
Цикл for x in numbers перебирает сами элементы, а не их номера — это удобнее, чем for i in range(len(numbers)), и ошибиться с границами невозможно.
Чтобы список вводил пользователь одной строкой через пробел:
numbers = [int(x) for x in input().split()]
print(len(numbers), sum(numbers), max(numbers), min(numbers))
Ввод 12 5 8 20 7 → вывод 5 52 20 5.
Разбор строки: input() даёт "12 5 8 20 7", метод .split() режет её по пробелам в список строк ["12", "5", "8", "20", "7"], а конструкция [int(x) for x in ...] (списочное выражение) применяет int к каждому элементу.
Совет:
.split()без аргументов сам справляется с несколькими пробелами подряд и с пробелами по краям. Это стандартный способ читать список чисел на олимпиадах и в ОГЭ.
Задача 10. ОГЭ, задание 15.2
Формулировка задания 15.2 из ОГЭ по информатике устроена всегда одинаково. Разберём типовой вариант:
Напишите программу, которая в последовательности натуральных чисел определяет количество чисел, кратных 3 и оканчивающихся на 4. Программа получает на вход количество чисел в последовательности, а затем сами числа. Количество чисел не превышает 1000. Введённые числа не превышают 30 000. Программа должна вывести одно число — количество чисел, кратных 3 и оканчивающихся на 4.
n = int(input())
count = 0
for i in range(n):
x = int(input())
if x % 3 == 0 and x % 10 == 4:
count += 1
print(count)
Проверка на примере из условия:
| Ввод | Что происходит |
|---|---|
| 5 | столько чисел будет дальше |
| 24 | 24 % 3 = 0 ✓, последняя цифра 4 ✓ → считаем |
| 34 | 34 % 3 = 1 ✗ → пропускаем |
| 54 | 54 % 3 = 0 ✓, последняя цифра 4 ✓ → считаем |
| 12 | последняя цифра 2 ✗ → пропускаем |
| 84 | 84 % 3 = 0 ✓, последняя цифра 4 ✓ → считаем |
| Вывод | 3 |
Разбор по частям:
n = int(input())— сначала читаем, сколько чисел будет. Это число само по себе в подсчёте не участвует.for i in range(n)— повторяем ровноnраз. Переменнаяiвнутри цикла не нужна, она просто отсчитывает повторы; можно назвать её_.x = int(input())внутри цикла — вот главное отличие от предыдущих задач: ввод происходит на каждом шаге, а не один раз до цикла. Числа нигде не хранятся, каждое обрабатывается и забывается — при 1000 чисел это экономнее, чем список.x % 3 == 0— кратность трём.x % 10 == 4— «оканчивается на 4», то есть остаток от деления на 10 равен 4.and— оба условия одновременно.
В реальном варианте условие меняют: другой делитель, другая последняя цифра, «сумма таких чисел», «наибольшее из них». Каркас остаётся тот же, дописывается один-два накопителя:
n = int(input())
count = 0
total = 0
biggest = 0
for i in range(n):
x = int(input())
if x % 3 == 0 and x % 10 == 4:
count += 1
total += x
if x > biggest:
biggest = x
print(count, total, biggest)
На тех же данных (24, 34, 54, 12, 84) вывод: 3 162 84. Проверка: 24 + 54 + 84 = 162, наибольшее 84.
Ошибка: начинать поиск максимума с
biggest = 0можно только потому, что в условии сказано «натуральных чисел» — все они положительные. Если бы числа могли быть отрицательными, нулевое начальное значение дало бы неверный ответ, и максимум надо было бы инициализировать первым подходящим элементом.
Актуальную демоверсию, спецификацию и кодификатор ОГЭ по информатике всегда можно скачать на сайте ФИПИ — там же лежит открытый банк заданий, откуда берут формулировки.
Типичные ошибки
Забыть int() вокруг input(). Программа молча складывает строки: 2 + 3 даёт 23. Ошибки нет, ответ неверный — самый противный случай.
Перепутать = и ==. if x = 5 — синтаксическая ошибка. Присваивание одним знаком, сравнение двумя.
Сбитый отступ. IndentationError: unexpected indent или, хуже, программа работает, но не так: строка вылезла из цикла и выполняется один раз вместо N.
Правая граница range. «До 10» пишется range(1, 11). Классическая потеря последнего элемента.
print внутри цикла вместо после. Вместо одного ответа получаешь простыню строк. Проверь, на каком уровне отступа стоит print.
Обнуление накопителя внутри цикла. total = 0 должно быть до for, иначе сумма каждый раз сбрасывается.
Русские кавычки. Если скопировать код из документа Word, кавычки могут превратиться в «ёлочки» — Python их не понимает. Набирай руками.
/ вместо //. Обычное деление всегда возвращает дробное число, даже 10 / 2 даёт 5.0. Для работы с цифрами и индексами нужно //.
Русские буквы в именах переменных. Технически Python это разрешает, но на экзамене и в чужом коде так не делают — держись латиницы.
Частые вопросы
С чего начать изучение Python школьнику?
С установки Python с python.org и редактора IDLE, который ставится вместе с ним. Дальше — ровно по этому списку задач: ввод-вывод, преобразование типов, условие, цикл, накопитель, список. Десять задач с полным пониманием дают больше, чем пятьдесят скопированных решений.
Почему input() не работает с числами?
Работает, просто возвращает строку. input() не знает, что ты ввёл число, для него любой ввод — набор символов. Поэтому результат оборачивают в int() для целых или float() для дробных: n = int(input()).
Чем отличаются /, // и %?
/ — обычное деление, всегда даёт дробное число (7 / 2 = 3.5). // — целая часть от деления, дробь отбрасывается (7 // 2 = 3). % — остаток (7 % 2 = 1). Пара // и % — основной инструмент для работы с цифрами числа и для проверки кратности.
Как проверить, что число делится на другое?
Через остаток: if x % 5 == 0 значит «x делится на 5 нацело». Так же проверяют чётность (x % 2 == 0) и последнюю цифру (x % 10 == 7 — оканчивается на 7).
Что писать на ОГЭ по информатике — Python или другой язык?
Задание 15.2 можно выполнять на любом языке программирования, который ты знаешь: Python, Паскаль, C++, Бейсик. Python обычно короче остальных и требует меньше служебного кода — на экзамене это экономит время и снижает шанс опечатки. Главное — писать на том языке, на котором ты уверенно набираешь код без подсказок.
Как понять, что программа правильная?
Прогнать её минимум на трёх наборах данных: обычном, крайнем (ноль, единица, одно число в последовательности) и «пустом» результате (когда подходящих чисел нет вообще — должно вывести 0). Если все три сходятся с посчитанным вручную ответом, программа почти наверняка верна.
Что дальше
- Алгоритмы и блок-схемы: разбор задач ОГЭ — то же самое, но без кода: трассировка, исполнитель Робот, задание 6.
- Информатика: разбор задач на системы счисления и логику — вторая половина школьной информатики.
- Информатика и программирование школьнику — как выстроить обучение, а не отдельные задачи.
- ЕГЭ по информатике: план подготовки — если после ОГЭ планируешь идти дальше.
- Как подготовиться к ОГЭ — общий режим подготовки по всем предметам.
- Программа выдаёт не тот ответ, а где — непонятно? Выложи код на Razbery — там покажут строку с ошибкой и объяснят, почему она ломает логику.