В КУРСЕ?

Разбираемся в теме

Python: функция показала число, но почему программа не может его использовать?

Начинающая программа часто получает данные, сразу считает результат и печатает его в одном месте. Пока задача маленькая, это удобно. Но при повторном использовании расчёта возникают вопросы: откуда взять число и почему переменная содержит не то, что видно на экране? Различие между выводом и возвратом значения помогает сделать код понятнее.

Вывод сообщает человеку, возврат передаёт программе

Функция print выводит представление значения в заданный поток, обычно на экран. Оператор return завершает выполнение функции и передаёт значение вызывающему коду. Эти действия решают разные задачи. Число может быть напечатано, но не возвращено для дальнейшего вычисления. Если выполнение функции заканчивается без явного возврата значения, результатом вызова становится None. Это не копия последнего показанного числа. Поэтому при отладке важно смотреть не только на видимую строку, но и на то, какое значение получает код, вызвавший функцию.

Отделите расчёт от получения данных

Представим функцию расчёта стоимости: количество умножается на цену за единицу. Ей удобно передавать уже подготовленные числовые значения и получать число в ответ. Ввод с клавиатуры и красивую печать результата можно оставить отдельным частям программы. Так один расчёт получится использовать и для ручного ввода, и для данных из другого источника. Функция не должна каждый раз задавать вопрос человеку, если вызывающий код уже знает нужные значения. Маленькая ясная задача делает поведение функции проще для проверки.

Проверьте типы на границе

Вызов input возвращает строку. Если пользователь ввёл цифры, они всё равно сначала представлены текстом. Преобразование в число требует отдельного решения и может завершиться ошибкой, если введено неподходящее значение. Не стоит предполагать, что любой полученный текст автоматически пригоден для арифметики. Для учебной задачи можно заранее ограничить данные целыми неотрицательными числами и явно проверить это условие. Например, количество три и цена сто двадцать дают стоимость триста шестьдесят. В реальной денежной системе дополнительно потребуются правила точности и округления, которые не следует подменять случайным выбором типа.

Проверяйте результат небольшими примерами

Выберите несколько случаев с известным ответом: обычное количество, ноль и недопустимый ввод на этапе подготовки данных. Сравнивайте возвращаемое значение с ожиданием. Если проверять только напечатанную строку, можно пропустить ошибку в передаче результата между частями программы. Названия переменных должны помогать понимать роль значения. Количество, цена и итог являются разными понятиями, даже когда все представлены числами. Не добавляйте в одну функцию несвязанные обязанности, пока не ясна её основная задача. Исправлять маленький расчёт легче, когда ввод, преобразование и отображение не скрывают его поведение.

Попробуйте на практике

Напишите небольшую учебную функцию расчёта стоимости и используйте её результат отдельно.

  1. Определите функцию с двумя параметрами для количества и цены, возвращающую их произведение.
  2. Вызовите её для количества три и цены сто двадцать, сохраните результат в переменную и только затем выведите его.
  3. Проверьте случай нулевого количества и объясните ожидаемый результат.
  4. Отдельно подготовьте ввод с клавиатуры: преобразуйте допустимый текст в число и предусмотрите понятную реакцию на неподходящий ввод.

Как проверить результат. Расчёт возвращает триста шестьдесят для первого случая и ноль для второго. Вывод на экран выполняется отдельно, а неподходящий текст не принимается за готовое число.

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

Можно ли использовать print и return в одной функции?

Технически можно, но полезно понимать роль каждого действия. Для переиспользуемого расчёта обычно удобнее возвращать значение и выводить его отдельно.

None означает ошибку Python?

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

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов