Теория
Одна функция — одна ответственность
Обычно программа не становится большой за один раз. Сначала в ней появляется ввод, затем новое вычисление, повторяющийся поиск и сохранение. Когда фрагмент уже можно назвать человеческими словами, его удобно вынести в функцию.
Это не призыв дробить каждую строку. Граница полезна там, где часть делает одно понятное дело: прочитать число, найти запись, вычислить результат или показать его.
def read_number(): return int(input()) def double(number): return number * 2 value = read_number()print(double(value))Как данные проходят между частями
Основная программа связывает функции в последовательность. Возвращённое значение первой части становится аргументом второй, а вывод происходит только после завершения вычисления.
При трассировке следуйте по значениям, а не прыгайте между всеми строками сразу: вход, результат первой функции, результат второй, вывод.
- Переменная value получает число 6.
- Вызов double получает 6 как параметр number.
- Функция возвращает 12, и только это число передаётся print.
Смешанные обязанности затрудняют проверку
Если функция одновременно спрашивает input, вычисляет и печатает, её трудно попробовать на заранее выбранном значении. Когда вычисление получает аргумент и возвращает результат, его можно спокойно проверить отдельно.
Как находить границы функций
Выпишите этапы решения обычными словами. Объединяйте команды, которые вместе дают один называемый результат, и передавайте этот результат следующей части.
- Опишите вход и итог. Зафиксируйте формат данных и требуемый результат.
- Выделите вычисления. Каждая функция должна иметь понятный возвращаемый результат.
- Соедините вызовы. Передавайте данные явно через аргументы и return.
- Проверьте отдельно. Для вычислительных функций используйте маленькие готовые аргументы.
Практика
Назовите ответственность функции
`read_numbers` отвечает за ввод и возвращает уже подготовленные числа. Вычисление и вывод тогда не зависят от формата ввода.
Проследите данные между функциями
Первый вызов возвращает 6. Это значение становится аргументом double, который возвращает 12.
Соберите вычисление из частей
absolute превращает -3 в 3, затем square вычисляет 3 * 3 = 9.
Не смешивайте вывод и вычисление
`return value * 2` сохраняет разделение обязанностей: функция вычисляет, а печать выполняется отдельно.
Запустите программу из функций
add возвращает 5, затем double возвращает 5 * 2 = 10.
Итог
Теперь вы можете собирать программу из частей с ясным движением данных между ними.
Возьмите линейную программу из ввода, двух вычислений и вывода. Разделите её на функции и проверьте вычислительную часть без input.
Прогресс
0 / 5Вы ещё не решали задания