Функції в програмуванні можна представити як ізольований блок коду, звернення до якого в процесі виконання програми може бути багаторазовим. Навіщо потрібні такі блоки інструкцій? У першу чергу, щоб скоротити обсяг вихідного коду: раціонально винести часто повторювані вирази в окремий блок і, потім, у міру потреби, звертатися до нього.
Уявімо собі таку ситуацію. Потрібно написати скрипт, який при виконанні повинен три рази запитувати у користувача різні дані, але виконувати з ними одні й ті ж дії.
a = int(input('Уведіть перше число: '))
b = int(input('Уведіть друге число: '))
if a > b:
print(a-b)
else:
print(b-a)
c = int(input('Уведіть перше число: '))
d = int(input('Уведіть друге число: '))
if c > d:
print(c-d)
else:
print(d-c)
e = int(input('Уведіть перше число: '))
f = int(input('Уведіть друге число: '))
if e > f:
print(e-f)
else:
print(f-e)
Дана програма знаходить модуль різниці двох чисел. Очевидно, що такий запис вихідного коду не раціональний: виходять три майже однакових блоки коду. Здавалося б, чому б не використати цикл while для організації повторення?
i = 0
while i < 3:
a = int(input('Уведіть перше число: '))
b = int(input('Уведіть друге число: '))
if a > b:
print(a-b)
else:
print(b-a)
i = i + 1
Проте, в цьому випадку є один нюанс. Введені користувачем дані завжди зв'язуються з змінними a і b. При кожному витку циклу колишні дані втрачаються. Що ж робити, якщо всі шість чисел, введених користувачем треба зберегти для подальшого використання в програмі? Розглянемо рішення цієї задачі з використанням функції.
def diff():
m = int(input('Уведіть перше число: '))
n = int(input('Уведіть друге число: '))
if m > n:
print(m-n)
else:
print(n-m)
return m,n
a,b = diff()
c,d = diff()
e,f = diff()
def - це інструкція (команда) мови програмування Python, що дозволяє створювати функцію. diff - це ім'я функції, яке (так само як і імена змінних) може бути майже будь-яким, але бажано осмисленим. Після в дужках перераховуються параметри функції. Якщо їх немає, то дужки залишаються порожніми. Далі йде двокрапка, що позначає закінчення заголовка функції (аналогічно з умовами та циклами). Після заголовка з нового рядка і з відступом слідують вирази тіла функції. У кінці тіла функції присутня інструкція return (її може й не бути), яка повертає результат, або результати (як у вищевказаному прикладі) в основну гілку програми. У даному випадку, якби у функції не було інструкції return, то в основну програму нічого б не поверталося, і змінним a і b (c і d, а також e і f) числові значення не присвоювалися б.
Після функції йде, так звана, основна гілка програми, в якій змінним попарно присвоюється результат виконання викликаної функції. У інших ситуаціях, коли функція не вертає значень, її виклик не зв'язується зі змінною.
Сама функція виконуються лише тоді, коли вона викликається в основній гілці програми. Так, наприклад, якщо функція присутня у вихідному коді, але ніде не викликається в ньому, то вона не буде виконуватись в програмі жодного разу.
1. Напишіть функцію, яка обчислює суму трьох чисел і повертає результат в основну гілку програми.
2. Придумайте програму, в якій з однієї функції викликається друга. При цьому жодна з них нічого не повертає в основну гілку програми, обидві повинні виводити результати своєї роботи за допомогою функції print().
Завантажити готову роботу в Classroom/