ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Декомпозиция решения: функции, контракты и повторное использование

Автор: · Обновлено

Функция — это именованный фрагмент программы, который выполняет отдельную задачу. Функции помогают не повторять код, упрощают проверку решения и делают программу понятнее.

Пример функции:

def is_even(number):
    return number % 2 == 0

value = int(input())

if is_even(value):
    print('четное')
else:
    print('нечетное')

Функция is_even получает число и возвращает логический ответ. Основная программа становится короче: она читает значение и использует готовую проверку.

Когда создавать функцию

Функция нужна, если действие повторяется несколько раз или если часть решения можно назвать отдельным смысловым блоком: проверить число, посчитать сумму цифр, нормализовать строку, найти максимум, вывести результат.

def digit_sum(number):
    total = 0
    while number > 0:
        total += number % 10
        number //= 10
    return total

print(digit_sum(12345))

Польза для подготовки

В задачах ОГЭ, ЕГЭ и олимпиад часто приходится комбинировать несколько идей. Функции позволяют проверить каждую идею отдельно. Если ошибка возникла в сумме цифр, ее проще найти в функции digit_sum, чем в длинной программе на сто строк.

Старайтесь давать функциям имена по действию: is_prime, count_digits, normalize_text, find_answer. Хорошее имя работает как комментарий и помогает быстрее возвращаться к решению после перерыва.

Практикум: контракт функции расчёта прямоугольника

Спроектируйте две функции: rectangle_area(width, height) и rectangle_perimeter(width, height). Запишите контракт до кода: аргументы положительные числа, результат — число, ввод и печать выполняются снаружи. Проверьте размеры 3 × 4, дробные значения и нулевую сторону. Решите, должна ли функция возвращать специальное значение или отклонять недопустимый аргумент, и используйте это правило одинаково. Затем измените формат вывода, не трогая вычислительные функции: это покажет, что декомпозиция действительно разделяет обязанности.

Контрольная точка

Если функция одновременно вызывает input, вычисляет площадь и печатает ответ, какие части труднее протестировать и переиспользовать? Перечислите данные, которые должны входить через параметры, и значение, которое должно возвращаться.

Частые вопросы

Нужно ли выносить в функцию каждую строку программы?

Нет. Функция полезна, когда у действия есть самостоятельный смысл, понятный контракт, повторное использование или отдельные тесты. Слишком мелкое дробление без названной ответственности делает путь данных сложнее, а не понятнее.

Источники