Код БарсикОсновы Python
Основы Python›C15 · Теория

Теория · C15

Составление программы из функций

Разберись в теме, запусти пример и переходи к самостоятельным задачам.

РАЗБИРАЕМ ПО ШАГАМ

От идеи к работающему коду

Большая программа становится понятнее, если её части решают небольшие задачи. Научимся соединять функции, выбирать параметры и повторно использовать готовые решения.

Сразу к запуску примера ↓
Барсик соединяет несколько небольших функций в один рабочий процесс.
Барсик соединяет несколько небольших функций в один рабочий процесс.
  1. 1Разделить задачу
  2. 2Написать маленькие функции
  3. 3Соединить и проверить

1. Одна функция — понятная ответственность

Название функции должно объяснять её действие: count_vowels считает гласные, а не печатает меню и не сохраняет файл. Чем яснее границы, тем проще найти ошибку.

Сначала определяем вход и выход каждой части, затем реализуем её отдельно. В русскоязычном примере явно перечисляем гласные: правило не должно зависеть от догадок программы.

Python
def count_vowels(text):    total = 0    for char in text.casefold():        if char in "аеёиоуыэюя":            total += 1    return totalprint(count_vowels("Барсик"))

2. Один результат помогает получить другой

Функция может возвращать несколько связанных результатов: например, количества гласных и согласных. Запись return vowels, consonants возвращает пару значений — кортеж. Знаки препинания и цифры не должны становиться согласными.

Договоримся, что в этой задаче текст русский, а ь и ъ не считаем ни гласными, ни согласными. Правило задачи важнее короткой, но неверной формулы.

Python
def letter_counts(text):    vowels = 0    consonants = 0    for char in text.casefold():        if char in "аеёиоуыэюя":            vowels += 1        elif char in "бвгджзйклмнпрстфхцчшщ":            consonants += 1    return vowels, consonantsprint(letter_counts("Барсик!"))

3. Параметры по умолчанию

Необязательный параметр задаёт значение для вызовов, где аргумент не передали. message("Анна") использует обычное приветствие, а message("Анна", "Добрый вечер") — переданное.

Значения по умолчанию вычисляются при определении функции. Не используй изменяемый список [] как накопитель по умолчанию: он будет общим для вызовов. Для наших текстовых настроек строки подходят.

Python
def message(name, greeting="Привет"):    return f"{greeting}, {name}!"print(message("Анна"))print(message("Анна", "Добрый вечер"))

4. Сначала особое правило, затем общее

Склонение «кристалл» зависит от последних цифр. Для 11–14 действует особый вариант, даже когда последняя цифра похожа на 1, 2, 3 или 4. Поэтому эту проверку ставим первой.

Операции % 100 и % 10 выделяют последние две и последнюю цифру. Функция возвращает форму слова, а внешний код соединяет её с числом.

Python
def crystal_word(number):    number = abs(number)    if 11 <= number % 100 <= 14:        return "кристаллов"    if number % 10 == 1:        return "кристалл"    if 2 <= number % 10 <= 4:        return "кристалла"    return "кристаллов"for number in [1, 2, 11, 21, 114]:    print(number, crystal_word(number))

Где легко ошибиться

  • Смешать чтение ввода с преобразованием данных во всех функциях.
  • Проверять последнюю цифру раньше исключения 11–14.
  • Считать цифры и знаки согласными буквами.
Проверь понимание: Почему для 11 нельзя сначала проверять последнюю цифру 1?

Получится «11 кристалл». Сначала нужен особый случай 11–14, затем общее правило последней цифры.

Разделяем ввод и вычисления

Запусти пример. Затем измени код или входные данные и проверь, как меняется вывод.

Пример входных данных

Ввод не нужен

Ожидаемый вывод

К оплате: 36 монет
main.pyPython · можно менять код

Подготавливаем редактор…

Загрузка Python…

Каждый ответ — с новой строки.

Твой вывод

Здесь появится результат запуска.

Дальше — самостоятельные задачи

  1. Посчитать гласные
  2. Вернуть количество гласных и согласных
  3. Подобрать форму 1 кристалл, 2 кристалла, 11 кристаллов, 21 кристалл