Перевод блок-схемы в 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 — «пока выполняется условие».
  • Идите по схеме сверху вниз и переписывайте блоки построчно, ничего не пропуская.
  • Проверяйте результат на крайних значениях и, где можно, сверяйте с формулой.
Проверьте себя
1. В какую конструкцию Python переводится ромб (блок проверки условия) с двумя выходами «да» и «нет»?
Aцикл for
Bоператор if/else
Cфункция print
Dприсваивание x = 0
2. В схеме счётчик i должен дойти до n включительно. Как правильно записать заголовок цикла на Python?
Afor i in range(1, n)
Bfor i in range(1, n + 1)
Cfor i in range(0, n)
Dwhile i > n