Перевод блок-схемы в Python
Блок-схема и программа — это одно и то же, записанное двумя разными способами; научимся переводить с языка фигур на язык Python.
Перевод блок-схемы в код — это сопоставление каждой фигуры схемы конкретной конструкции языка: прямоугольник становится строкой действия, ромб — оператором
if, а стрелка назад — циклом.
На прошлых уроках мы рисовали алгоритмы фигурами по ГОСТ и проходили их трассировкой. Но блок-схема — это не цель, а чертёж. Настоящая программа должна работать на компьютере, а значит, схему нужно перевести на язык программирования. Хорошая новость: перевод почти механический. Если вы умеете читать схему, вы умеете писать код — нужно лишь запомнить, какая фигура во что превращается.
Зачем это нужно
На экзамене по информатике (и ОГЭ, и ЕГЭ) постоянно встречается одно и то же: дана блок-схема — запишите программу, или наоборот, дан код — постройте схему. Это две стороны одной медали. Кто видит соответствие «фигура → конструкция», тот не путается в ветвлениях и циклах и не теряет баллы на мелочах вроде лишнего или забытого блока. А ещё блок-схема — отличный способ продумать сложную программу до того, как сесть её набирать: рисуем логику фигурами, потом переписываем построчно. Профессиональные программисты так и поступают со сложными местами — сначала набрасывают схему на бумаге, и только потом садятся за клавиатуру, потому что исправить чертёж проще, чем переписывать готовый код.
Есть и обратная польза. Когда вы читаете чужую программу или собственный код недельной давности, мысленно стройте по нему схему: где ветвление, где петля, куда уходят стрелки. Такое «чтение фигурами» помогает быстро понять структуру и заметить, что какая-то ветка обрабатывается неверно. Перевод в обе стороны — навык, который пригодится не только на экзамене, но и всюду, где придётся иметь дело с алгоритмами.
Соответствие фигур и конструкций
Запомните эту таблицу — она покрывает 95% школьных схем.
| Фигура блок-схемы | Что означает | Конструкция Python |
|---|---|---|
| Овал «Начало/Конец» | границы алгоритма | начало и конец программы (отдельного кода не требует) |
| Параллелограмм | ввод/вывод | input() / print() |
| Прямоугольник | действие, присваивание | x = a + b |
| Ромб | проверка условия | if ... else |
| Стрелка назад + ромб | повторение | while или for |
Ромб → if
Ромб всегда имеет один вход и два выхода — «да» и «нет». Это в точности оператор if. Условие из ромба пишем в заголовок, ветку «да» — в тело if, ветку «нет» — в else. Если ветка «нет» пустая (стрелка просто идёт дальше), else не пишем вовсе.
a = 7
if a % 2 == 0:
print("чётное")
else:
print("нечётное")
Вывод:
нечётное
Цикл → while или for
Стрелка, возвращающаяся вверх к ромбу-условию, — это цикл. Если число повторений известно заранее (например, «для i от 1 до 5») — берём for. Если повторяем «пока выполняется условие» — берём while. Условие продолжения цикла в схеме часто записано как условие выхода, поэтому будьте внимательны со знаком: «повторять, пока i ≤ 5» превращается в while i <= 5.
Как это работает
Разберём перевод целиком на классической задаче: найти сумму всех целых чисел от 1 до n. Словесная схема такая: ввести n; завести накопитель s = 0 и счётчик i = 1; пока i ≤ n — прибавить i к s и увеличить i на единицу; когда условие нарушилось — вывести s.
Идём по схеме сверху вниз и переписываем каждый блок построчно. Параллелограмм ввода → присваивание (на экзамене вход обычно задан, поэтому пишем число прямо). Два прямоугольника инициализации → две строки присваивания. Ромб со стрелкой назад → while. Прямоугольники внутри петли → тело цикла. Параллелограмм вывода после цикла → print.
n = 5
s = 0
i = 1
while i <= n:
s = s + i
i = i + 1
print(s)
Вывод:
15
Проверим теорией: сумма чисел от 1 до n считается по формуле Гаусса
$$ S = \\frac{n \\cdot (n + 1)}{2} $$
При $ n = 5 $ получаем $ S = \\frac{5 \\cdot 6}{2} = 15 $ — код и формула сошлись. Если число повторений известно (а здесь оно ровно n), тот же алгоритм короче пишется через for:
n = 5
s = 0
for i in range(1, n + 1):
s += i
print(s)
Вывод:
15
Обратите внимание на range(1, n + 1): в Python правая граница не включается, поэтому чтобы дойти до n, пишем n + 1. Это прямое отражение схемы, где счётчик доходит ровно до n включительно.
Частые ошибки
- Забыть инициализацию накопителя. Если в схеме был блок
s = 0, а в коде его нет, программа упадёт с ошибкой «имя не определено» или посчитает мусор. Каждый прямоугольник схемы обязан превратиться в строку. - Перепутать условие цикла. Стрелка назад идёт пока условие истинно. Если в схеме «выход, когда i > n», то цикл продолжается, пока
i <= n— пишем условие продолжения, а не выхода. - Потерять шаг счётчика. В
whileлегко забытьi = i + 1— тогда условие никогда не нарушится и получится бесконечный цикл (об этом подробно в уроке про отладку). - Сдвиг границы на единицу (off-by-one).
range(1, n)вместоrange(1, n + 1)недосчитает последнее число. Всегда мысленно прогоняйте крайние значения i.
Итоги
- Перевод схемы в код почти механический: каждой фигуре соответствует своя конструкция.
- Ромб — это
if/else; пустая ветка «нет» означаетifбезelse. - Стрелка назад — это цикл:
forпри известном числе повторов,while— «пока выполняется условие». - Идите по схеме сверху вниз и переписывайте блоки построчно, ничего не пропуская.
- Проверяйте результат на крайних значениях и, где можно, сверяйте с формулой.