Тема 5. Функції користувача і модулі мови Python
п.5.1. Функції
5.1 Функції
Приклад 1.
Розглянемо програмний код, у якому оголошено дві функції: функція без параметрів - funct_1 і функція з двома параметрами x i y — funct_2.
Звернення до функції funct_1 здійснюється один раз, а до функції funct_2 — двічі. Після звернення до функції funct_1 виконується множення числа 2.3 на число 3.5 і виведення отриманою результату на екран.
Далі управління передаватиме в основну програму інструкції а, b = 2, 3, y результаті чого змінна а набуде значення 2, змінна b - значення 3.
def funct_1():
y=2.3*3.5
print(y)
def funct_2(x,y):
z=x*x+y*y
return z
funct_1()
a,b=2,3
print (funct_2(a,b))
a,b=3,4
print(funct_2(a,b))
Результат виконання:
8.049999999999999
13
25
Приклад 2. Приклад програми з передаванням функції значень кортежів і списків
def funct_05(a,b,c): #функція має три параметири
return (a+b+c)/y #обчислення і повернення результату
x1=(2,3,4) #кортеж
x2=[5,6,7] #список
y=len(x1) #довжина кортежу
print(funct_05(*x1)) #перше звернення до функції
y=len(x2) #довжина списку
print(funct_05(*x2)) #друге звернення до функції
Якщо параметрам функції передаються значення словника, то в інструкції звернення до функції перед її іменем ставлять два символи зірочка (**). А якщо списку або кортежу, то одну зірочку.
Приклад 3.
Програма, у якій під час першого звернення до функції параметрам передаються значення словника, а під час другого звернення – значення кортежу та словника.
import math #імпортування модуля math
def funct_06(a,b,c): #функція з 3 параметирами
s=a+b+c #обчислення суми чисел
return math.sqrt(s) #обчислення кореня квадратного і повернення результату
d1={"a":1,"b":2,"c":3} #словник
# параметри функції набувають значень словника
print(funct_06(**d1)) #перше звернення до функції
#параметри функції набудуть значень кортежу і словника
t, d2=(5,6),{"c":7} #кортеж і словник
print(funct_06(*t,**d2)) #друге звернення до функції
Результат виконання програми
2.449489742783178
4.242640687119285
Приклад 4. Програма з посиланням на функцію з допомогою змінної
Інструкція def y процесі оголошення функції створює об'єкт, який має тип function, i зберігає посилання на цей об'єкт в ідентифікаторі, яким є ім'я функції. Це посилання на функцію можна зберегти в іншій змінній.
import math #імпортування модуля math
import random #імпортування модуля random
def funct_07(a): #функція з 1 параметром
return math.factorial(a) #обчислення факторіалу і повернення результату
z=funct_07 #почилання на об'єкт у змінній z
x=random.randint(3,9) #x - випадкове число від 3 до 9
print(x) #виведення випадкового числа
print (z(x)) #перше звернення до функції
x=random.randint(2,7) #х - випадкове число від 2 до 7
print(x) #виведення випадкового числа
print(z(x)) #друге звернення до функції
Структура виведення та можливі значення виконання програми:
7
5040
5
120
Завдання для практичного опрацювання
- Складіть програму з використанням функції без параметрів для обчислення об'єму конуса.
- Складіть програму з використанням функцій із параметрами для обчислення двох різних за розміром прямокутних трикутників із відомими значеннями їх катетів і обчисліть площі кола з відомим радіусом.
- Кубик із цифрами від 1 до 6 підкидають п'ять разів. Складіть програму обчислення середнього значення цих чисел із використанням функції з параметрами.
- Складіть програму обчислення значення виразу a*b—c/d із використанням функції з параметрами для значень списку [3, 5, 2, 7] і кортежу (4. 1, 5, 6).
- Генеруються три цілі випадкові числа в діапазоні від 3 до 7. Складіть програму з використанням функції з параметрами для обчислення суми квадратів цих чисел.
- З'ясуйте в Інтернеті, через які області України протікає Дніпро, та знайдіть їх площі. Складіть програму визначення областей із максимальною та мінімальною площами. Обчисліть середню площу. Використайте функції з параметрами.
Зразок виконаня вправ
1. Програма обчислення об'єму конуса для демонстрації звернення до функцій користувача з параметрами
import math
def func_1(x,y):
v=math.pi*x**2*y
print("V=",v)
r=int(input("радіус конуса r="))
h=int(input("висота конуса h="))
func_1(r,h)
Без параметрів:
import math
def func_1():
r=int(input("радіус конуса r="))
h=int(input("висота конуса h="))
v=math.pi*r**2*h
print("V=",v)
func_1()
Зразок виконання завдання 2:
import math
def func_1(x,y):
return(x*y)
def func_2(z):
sk=math.pi*z**2
return(sk)
a=int(input("Довжина 1 прямокутника a="))
b=int(input("Ширина 1 прямокутника b="))
print("Площа 1 прямокутника S=",func_1(a,b))
a=int(input("Довжина 2 прямокутника a="))
b=int(input("Ширина 2 прямокутника b="))
print("Площа 2 прямокутника S=",func_1(a,b))
r=int(input("радіус круга r="))
print("Площа круга S=",func_2(r))
3. Приклад виконання завдання 3 (без параметрів):
def func_1():
s=0
import random
for i in range(6):
x=random.randint(1,7)
print(i," раз випало число: ",x)
s=s+x
return(s)
print("Середнє арифметичне: ",func_1())
З параметрами:
import random
def func(s):
x=random.randint(1,7)
print(i+1," раз випало число: ",x)
s=s+x
return (s)
s=0
for i in range(6):
s=func(s)
print("Сума очок, які випадали на кубику: ",s)
print("Середнє арифметичне: ",s/6)
Зразок виконання завдання 5:
import random
def func(a,b,c):
return (a*a+b*b+c*c)
x=random.randint(3,8)
y=random.randint(3,8)
z=random.randint(3,8)
print ("Згенеровано числа: ",x,y,z)
print("Сума квадратів даних чисел: ",func(x,y,z))
п. 5.1.2. Python. Розширені можливості Функції
п.5.1.2. Python. Розширені можливості Функції
Приклад 8. Програма з функцією, параметр якої може набувати довільної кількості аргументів
Розглянемо функції, у яких параметрам можна передавати довільну кількість значень аргументів. Для того щоб параметри могли набувати довільної кількості аргументів, їх y оголошенні функції необхідно вказувати з символом зірочка (*).
def func_09(*x): #параметр зі змінною кількістю аргументів
s=5 #початкове значення змінної
for i in x: #цикл
s=s+i #обчислення суми
return s #повернення результату
print(func_09(9,6)) #параметру передається 2 аргументи
print (func_09(3,4,7,10)) #параметру передається 4 аргументи
У цій програмі в процесі першого звернення до функції параметр х набуває двох значень: 9 і 6, а в процесі другого звернення – чотирьох значень: 3, 4, 7, 10. У результаті виконання програми після першого звернення до функції отримаємо значення 20, а після другого - 29.
Приклад 9. Програма, функція якої має комбінацію параметрів
def func_10(x, y=4, *z): #комбінація різних параметрів
s=2*y+x #обчислення виразу для значень х і у
for i in z: #цикл
#вираз s=s+i не виконується під час першого звернення до функції
#вираз s=s+i не виконується двічі під час другого звернення до функції
s=s+i #обчислення суми для значень z
return s #повернення результату
print(func_10(7)) #перше звернення до функції
print (func_10(5,8,9,12)) #друге звернення до функції
У процесі першого звернення до функції параметр при х набуває значення 7, параметр при у за замовчуванням має значення 4, а параметр при z — значення 0. Тому інструкція s=s+i в операторі циклу не виконується.
У процесі другого звернення до функції параметр при х набуває значення 5, параметр при у - значення 8, а параметр при z - двох значень: 9 і 12. Таким чином, вираз s=s+i виконується двічі: для значення змінної при і, яка дорівнює 9 і 12. У результаті виконання програми отримаємо значення 15 і 42.
Завдання для практичної роботи
- Складіть програму обчислення значення виразу а*b2-2*а, якщо а >b і виразу а/b, якщо а <= b із використанням функції з одним обов'язковим та одним необов'язковим параметрами.
- Складіть програму з використанням однієї функції зі змінною кількістю аргументів для обчислення сум чисел 1, 3, 5. 7, 9 і 6, 8. 10.
- Складіть програму з використанням анонімних функцій без параметрів і з параметрами для обчислення значень виразів 3 / 7 + 5* 8 / З , 2*х+х/у і (3*х+5)/(у-2) для відомих значень х i y.
- Функція має три параметри: обов'язковий, необов'язковий, зі змінною кількістю аргументів. Складіть програму обчислення добутку чисел 3 на 7 і добутку чисел 4, 6, 7, 9, 10.
- У змаганнях із підняття гирі від 10-А класу беруть участь 5 учнів, а від 10-Б класу - 4 учні. Відомо скільки разів підняв гирю кожен учень. Розробіть програму визначення різниці підняття гирі учнями обох класів.
- Прибуток від двох фірм Кагарлицького району Київської області постійний і складає, відповідно, 10 і 15 млн грн на рік. Ще від двох фірм цього району прибуток визначається наприкінці року. Постійний прибуток також мають дві фірми Обухівського району Київської області й становить, відповідно, 9 і17 млн грн на рік, а від однієї фірми прибуток визначається наприкінці року. Розробіть програму обчислення загального прибутку фірмами з кожного району. Виберіть і обґрунтуйте раціональний варіант програмного коду
Підсумкове оцінювання
1. Дати відповіді на запитання (4 бали)
- Що називають функцією користувача?
- Як оголошується функція користувача?
- Яке призначення функції return?
- Які існують функції користувача?
- Що таке імя функції
- Що є тілом функції?
- Дати поняття параметра функції
2. Написати програмний код до завдань практичної роботи (по 4 бали):
- Складіть програму обчислення значення виразу a*b—c/d із використанням функції з параметрами для значень списку [3, 5, 2, 7] і кортежу (4. 1, 5, 6).
- Знайти сумарну площу 3 полів прямокутної форми, використовуючи функцію з параметрами.
п.5.2. Python. Рекурсивні функції
п.5.2. Python. Рекурсивні функції
Приклад 3.
Розглянемо сутність рекурсії на прикладі обчислення значення виразу x^n.
#рекурсивне обчислення числа x у степені n
def st(x,n): #заголовок функції
if n==0: #чи дорівнює число нулю
return 1 #повернення одиниці
else: #початок обчислення числа в степені
return st(x, n-1)*x #обчислення і повернення результату
рrint("уведіть число x") #повідомлення про уведення числа х
х = int(input()) #уведення числа x
рrint("уведіть число n”) #повідомлення про введення числа n
n = int(input()) #уведення числа n
print("peзультат =", st(x, n)) #звернення до рекурсивної функції
Програма обчислення факторіалу
#програма обчислення факторіалу уведеного числа
def tact (n) : #заголовок функції
if n==0: #пошук опорного значення
return 1 #повернення опорного значення
else: #починається обчислення факторіалу
return n*fact(n-1) #обчислення і повернення факторіалу
print(“уведіть число ”) #повідомлення про уведення числа
n=int(input)) #уведення числа
print(fact(n)) #звернення до рекурсивної функції
Програма обчислення найбільшого спільного дільника
# рекурсивне обчислення найбільшого спільного дільника
def nod(a,b): #заголовок функції
if b==0: #перевірка чисел на рівність
return a #повернення числа а
else: #починається обчислення nod
return nod(b,a%b) #обчислення і повернення числа nod
print(“уведіть число a”) #повідомлення про уведення числа а
a=int(input()) #уведення числа а
print(“уведіть число b”) #повідомлення про уведення числа b
b=int(input()) #уведення числа b
print(“nod=”,nod(a,b)) #звернення до рекурсивної функції
Завдання для практичної роботи
- Розробіть програму з рекурсивною функцією обчислення n перших членів геометричної прогресії, перший член якої дорівнює а і знаменник q.
- Розробіть програму з використанням рекурсивної функції обчислення кількості цифр у десятковому натуральному числі а.
- Для одновимірного числового масиву довжиною n розробіть програму з використанням рекурсивної функції обчислення добутку значень його елементів.
п. 5.3. Модулі
п.5.3. Модулі