Передавання значень у функцію та з неї. Формальні та фактичні параметри
За навчальною програмою 2018 року
Урок 45
10
(11)
teach-inf.com.ua
Функції користувача
Розділ 3 § 3.3
Ви ознайомились із методом поділу складної задачі на підзадачі. Алгоритм розв’язування кожної підзадачі можна оформити у вигляді функції, створивши функції користувача.
Це дає можливість багаторазового використання коду, спрощує його читання, написання, тестування, а також виправлення помилок.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Опис функцій у Python
Розділ 3 § 3.3
Пригадаймо синтаксис опису функцій у Python:
def <назва_функції>([<перелік формальних параметрів>]):
<тіло функції>
Тіло функції являє собою послідовність операторів, які будуть виконані після викликання функції.
Функція складається з трьох частин:
імені
параметрів
тіла
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Опис функцій у Python
Розділ 3 § 3.3
Під час опису функцій слід пам’ятати про кілька правил.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Опис функцій у Python
Розділ 3 § 3.3
Якщо функція не повертає значення на місце виклику або повернуте значення не потрібне, виклик функції записують окремим оператором основної програми:
<назва функції>([<перелік фактичних параметрів>])
Опис функції має міститися вище від виклику функції.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Опис функцій у Python
Розділ 3 § 3.3
Коли програма зустрічає виклик функції, керування передається у функцію із зазначеною назвою.
Після виконання операторів тіла функції програма продовжить виконуватися з оператора, наступного за оператором виклику функції.
Значення фактичних параметрів (аргументів) передаються формальним параметрам, тому слід дотримуватися відповідності між списками формальних і фактичних параметрів щодо їх кількості, порядку, типів.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Опис функцій у Python
Розділ 3 § 3.3
Прослідкуйте за послідовністю виконання операторів програми (починаючи з рядка 3). Зверніть увагу на значення, які отримують формальні параметри функції x і y.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Повернення результату�виконання функції
Розділ 3 § 3.3
Функція після виклику (1) може повернути на місце виклику обчислене значення.
Для цього в тілі функції записують оператор return. Він перериває виконання функції і повертає значення виразу (2), яке можна присвоїти змінній, вивести тощо.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Повернення результату�виконання функції
Розділ 3 § 3.3
Якщо функція не використовує оператор return явно, то повертає результат None, що означає відсутність значення, тобто ніщо, або порожнє місце.
Пригадайте функцію для знаходження найбільшого спільного дільника двох чисел, знайому вам із 6 класу:
def nsd(m, n):
while m != n:
if m>n: m = m–n
else: n = n–m
return m
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Повернення результату�виконання функції
Розділ 3 § 3.3
Складемо програму для розв’язування задачі.
Задача. Дано дві шестірні, що мають а і b зубців. Складемо програму для підрахунку, скільки обертів має здійснити кожна шестірня, щоб вони повернулись у початкове положення.
Під час обертання зубці шестерень проходять однакові шляхи.
a
b
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Повернення результату�виконання функції
Розділ 3 § 3.3
Для повернення в початкове положення потрібно, щоб кожна з них виконала ціле число обертів. Тобто шлях L, пройдений за весь час одним зубцем, має бути спільним кратним кількостей зубців а і b, а кількості обертів — відповідно L/a і L/b. Нам відомо, що:
НСК(a, b) = a*b/НСД(a, b)
найменше спільне кратне
НСК
найбільший спільний дільник
НСД
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Введення та виведення даних
Розділ 3 § 3.3
Якщо потрібно ввести декілька значень в одному рядку, можна скористатися функцією map().
Введемо значення для змінних a, b, c одним оператором:
a, b, c = map(float, input('a, b, c? ').split())
перетворює рядок, який повернула функція input('a, b, c? '), на список, використовуючи пропуск як роздільник.
Функція split()
застосовує функцію float() до кожного елемента отриманого списку й повертає послідовність дробових чисел.
Функція map()
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Повернення результату�виконання функції
Розділ 3 § 3.3
Складемо програму з використанням функції:
Результат виконання програми:
для a = 18, b = 24 виводиться:
Шестірні зроблять 4 і 3 оберти.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Область видимості змінної
Розділ 3 § 3.3
При створенні функції слід пам’ятати про області видимості змінних.
Тут змінну A оголошено у функції my_function(), тому за межами функції вона недоступна. Таку змінну називають локальною, і її область видимості показано синім прямокутником.
root = Tk()
С = 0 # Глобальна змінна
my_function()
print(C)
def my_function():
A = 5 # Локальна змінна
global C
C = C+A
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Область видимості змінної
Розділ 3 § 3.3
До змінної C, оголошеної в основній програмі, можна звернутись і в тілі функції my_function(),
викликаної після оголошення змінної, тобто C для функції є глобальною змінною.
root = Tk()
С = 0 # Глобальна змінна
my_function()
print(C)
def my_function():
A = 5 # Локальна змінна
global C
C = C+A
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Область видимості змінної
Розділ 3 § 3.3
Однак, якщо значення глобальної змінної потрібно змінити, її слід додатково оголосити із використанням
ключового слова global.
root = Tk()
С = 0 # Глобальна змінна
my_function()
print(C)
def my_function():
A = 5 # Локальна змінна
global C
C = C+A
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Область видимості змінної
Розділ 3 § 3.3
Область видимості змінної — це та частина програмного коду, в якій змінна доступна для використання.
Отже, функції поділяють програму на частини, кожна з яких виконує певне завдання. Їх можна багаторазово викликати із різних місць програми і переносити в інші програми.
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Питання для самоперевірки
Розділ 3 § 3.3
def f1():
a += 1
a = 10
f1()
print(a)
def f2(y):
y = y//10
x = 32
a = f2(x)
print(a)
def f3(y):
y = y%10
return y
x = 25
f3(x)
print(x)
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Питання для самоперевірки
а) х = 38, y = 4; б) х = 25, y = 10?
Розділ 3 § 3.3
def m(a, b):
return a//b, a%b
x = int(input('x = ?'))
y = int(input('y = ?'))
n, k = m(x, y)
print(n, k)
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Працюємо за комп’ютером
Розділ 3 § 3.3
Виконати завдання, що в документі Практичне завдання
10�(11)
© Вивчаємо інформатику teach-inf.com.ua
Дякую за увагу!
За навчальною програмою 2018 року
Урок 15
10
(11)
teach-inf.com.ua