(Python) Подпрограммы: процедуры и функции - 2


Подпрограмма-функция

Функция - это подпрограмма, которая возвращает результат (число, символьную строку и др.).

Представьте, что вы заказали товар в Интернет-магазине. С точки зрения программирования вы вызвали некоторую подпрограмму, и в отличии от процедуры, эта подпрограмма должна вернуть результат - доставить вам товар, который вы заказали. Вот такие подпрограммы и называются функциями.
Оформляется функция точно также, как и процедура. Единственное отличие от процедуры, - это наличие специального оператора return, после которого записывается значение, которое необходимо вернуть в основную программу.

Функция, которая возвращает среднее арифметическое двух целых чисел, будет выглядеть таким образом:
def average(a, b):
    avg = (a + b) / 2
    return avg
Осталось понять как вызвать эту функцию в основной программе:
Не следует вызывать функцию также, как и процедуру:
average(10, 5) 

Значение, которое вернет функция, потеряется. Это как будто бы товар из Интернет-магазина никому не вручили, а выбросили. Вряд ли это понравится заказчику.

Правильнее сохранить результат в переменной (или вывести его на экран):
a = average(10, 5) 
print(average(10, 5)) 

Надо запомнить!
  1. Подпрограмма-функция оформляется также, как и процедура.
  2. Вызов функции осуществляется в том месте программы, где бы вы поставили значение. Например, как параметр оператора print() или в арифметическом выражении. 

Алгоритм Евклида

Алгоритм Евклида — эффективный алгоритм для нахождения наибольшего общего делителя двух целых чисел (или общей меры двух отрезков). Алгоритм назван в честь греческого математика Евклида (III век до н. э.), который впервые описал его в VII и X книгах «Начал». Это один из старейших численных алгоритмов, используемых в наше время.

Вспомним математику.

Наибольший общий делитель двух натуральных чисел (НОД) - это самое большое натуральное число, на которое они делятся нацело.

Например, у чисел 12 и 18 имеются общие делители: 2, 3, 6. Наибольшим общим делителем является число 6. Это записывается так: НОД(12, 18) = 6

В программировании есть несколько реализаций алгоритма Евклида. Приведем описание одной из них в виде блок-схемы.


Попробуйте реализовать данный алгоритм.

Логические функции

Часто программисты используют логические функции, которые возвращают логические значения "истина" или "ложь" (true или false)
Такие функции полезны для того, чтобы  проверить какое-либо свойство.
Рассмотрим два примера записи логической функции, которая проверяет число на четность.
 
Описание Пример подпрограммы
1) Лучший способ: результат выражения n % 2 == 0 будет истина (True) или ложь (False)
def isEven(n):
    return (n % 2 == 0)
2) Можно и так записать, но более длинная запись и так лучше не делать
def isEven(n):
    if n % 2 == 0:
        return True;
    else:
        return False

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