Представь: ты делаешь крутого бота для Discord или пишешь игру. Код растёт, строк становится всё больше, и в какой-то момент ты понимаешь — это хаос. Найти ошибку? Невозможно. Добавить новую фишку? Кошмар наяву.
Знакомо? Тогда тебе нужны подпрограммы — штука, которая спасает код от превращения в свалку.
🤔 В чём фишка?
Подпрограммы — это как LEGO для кода. Вместо того чтобы писать одно и то же по 10 раз, ты создаёшь готовый блок и используешь его где угодно.
В Python два вида подпрограмм:
- Процедуры — делают что-то (например, выводят текст на экран)
- Функции — делают что-то И возвращают результат (например, вычисляют сумму)
Звучит сложно? Сейчас разберём на примерах!
🎮 Процедуры: нажал кнопку — получил действие
Процедура — это кнопка на геймпаде. Нажал X — персонаж прыгнул. Тебе не важно, как это работает внутри, важен результат.
Плохой код (копипаста):
print(1111111)
print(1111111)
print(1111111)
print(1111111)
Крутой код (с процедурой):
def digit():
print(1111111)
digit()
digit()
digit()
digit()
Профит? Если нужно изменить на 8 единиц — меняешь в ОДНОМ месте, а не в четырёх. Это и есть магия подпрограмм.
🎯 Процедуры с параметрами: регулируй как хочешь
А что если нужно выводить не 7 единиц, а разное количество? Добавляем параметр:
def digit(n):
print('1' * n)
digit(7) # 1111111
digit(10) # 1111111111
digit(3) # 111
Параметр — это как громкость на колонке. Крутишь вправо — громче, влево — тише. Здесь меняешь число — меняется длина строки.
🧮 Алгоритм Евклида: старая магия для НОД
Нужно найти НОД (наибольший общий делитель) двух чисел? Используй алгоритм, которому больше 2000 лет:
def nod(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
return a
Как работает? Вычитаем меньшее из большего, пока числа не станут равными. Просто, как в Древней Греции!
⚡ Функции: не просто делай, а ещё и возвращай!
Функция — это калькулятор. Ты вводишь 5 + 3, жмёшь «=» — получаешь 8. Функция не просто что-то делает, она отдаёт результат.
def max(a, b):
if a > b:
return a
else:
return b
print(max(6, 8)) # 8
x = max(6, 8) # x = 8
В чём сила? Результат можно сразу вывести, сохранить в переменную или передать в другую функцию!
Хочешь круче? Найди максимум из ЧЕТЫРЁХ чисел:
f = max(max(a, b), max(c, d))
Это как турнир: сначала полуфиналы (находим два максимума), потом финал (максимум из максимумов). Вот так функции работают в связке!
🐰 Рекурсия: функция вызывает САМА СЕБЯ
Самая мозговыносящая штука в программировании — рекурсия. Это когда функция вызывает саму себя. Как зеркала, отражающие друг друга до бесконечности.
Задача про кроликов (последовательность Фибоначчи)
Тебе подарили пару кроликов. Через 2 месяца они дали приплод. Потом каждый месяц — по паре. Сколько пар будет через 12 месяцев?
Ответ: 1, 1, 2, 3, 5, 8, 13, 21...
Это последовательность Фибоначчи! Каждое число — сумма двух предыдущих.
def f(n):
if n == 1 or n == 2:
return 1
else:
return f(n - 1) + f(n - 2)
Функция вызывает саму себя, пока не дойдёт до базового случая (1 или 2). Это как дерево, которое растёт вверх, ветвясь на каждом уровне.
Вау-момент: этой задаче больше 800 лет! Её решил итальянский математик Фибоначчи в XIII веке.
🌍 Глобальные vs локальные переменные
Локальная переменная — живёт только внутри функции. Как персонаж в игре, который исчезает, когда уровень закончился.
Глобальная переменная (с ключевым словом global) — живёт во всей программе. Как твой профиль в соцсети, доступный отовсюду.
def nod(a, b):
global x # теперь x — глобальная
# код функции
x = a
💡 Золотое правило программиста
Когда пишешь код, спроси себя: "Не буду ли я это повторять?"
Если ответ "Да" — создавай подпрограмму! Это сэкономит тебе часы отладки и сделает код понятным даже через год.
✨ Почему подпрограммы — это круто:
- Код легче читать (как оглавление в книге)
- Проще искать ошибки (не во всей программе, а в одной функции)
- Можно использовать один код 100 раз
- Легко добавлять новые фишки
🎯 Попробуй сам!
Задача для тебя: напиши функцию star(n), которая выводит строку из n звёздочек. Вызови её несколько раз с разными числами.
Челлендж: напиши функцию, которая считает количество цифр в числе. Например, для 12345 результат — 5.
🚀 Итог
Подпрограммы — это суперсила в программировании. С ними твой код:
- 🧹 Чище (не лапша из 1000 строк)
- 🔧 Удобнее (можно переиспользовать)
- 🐛 Легче отлаживать (ошибка в одном месте)
- 💪 Мощнее (одна функция может вызывать другую)
Каждый крутой проект на GitHub, каждое приложение на твоём телефоне, каждая игра — всё это построено на подпрограммах.
Практикуйся, экспериментируй, ломай и чини — так учатся все программисты!
💡 Полный учебный материал с примерами, иллюстрациями и практическими заданиями — на нашем сайте.