2. Мысалы, 5! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120 есептеу керек. Факториалды for циклды пайдаланып оңай
есептеуге болатыны түсінікті. Бірақ егер программада бірнеше сандар факториалын есептеу керек
болса, онда оны бір рет жазып оны әр жерлерге көшіріп жазуға болады, бірақта ол тиімді емес.
Сондықтан программалауда функциялар бар.
Функция — бұл программаның қалған бөлігінен оқшауланған және шақырылған кезде ғана
орындалатын кодтың бөліктері.
Мысалы sqrt(), len() және print() функциялары. Олардың барлығы ортақ қасиеттерге тән: олар
параметрлерді (нөл, бір немесе бірнеше) қабылдап, мәндерді қайтарады. Мысалы, sqrt() функциясы
бір параметрді қабылдайды және мәнді (түбір астындағы санды) қайтарады. Ал print() функциясы
айнымалы сандарды қабылдап, ештенені қайтармайды.
Енді кез келен санның факториалын есептейтін функцияны жазайық. Factorial() функиясы бір
параметрді қабылдайды да, мәнді қайтарады.
def factorial(n):
res = 1
for i in range(1, n + 1):
res *= i
return res
print(factorial(3))
print(factorial(5))
Функциялар
Нәтижесі:
6
120
3. Функциялар
1) Функция коды программаның басында (функцияны қолданар алдында) орналасу керек;
2) Функцияның бірінші жолы түсініктеме ретінде қолданылады (factorial() – идентификатор, яғни
функция аты). Идентификатордан кейін дөңгелек жақшада параметрлер тізімі жазылады;
3) Қос нүктеден кейін бос орын қалдырылып функция денесі жазылады.
4) Функция ішінде n факториал есептеліп res айнымалысына жазылады.
5) Функция return res инструкциясы арқылы функцияны аяқтайды да res айнымалысына мәнді
қайтарады.
6) Return инструкциясы функцияның кез келген жерінде қолданыла алады, оның орындалуы функция
жұмысын тоқтатады.
7) Егер функция мәнді қайтармайтын болса, онда return инструкциясы қайтармайтын мәнсіз
қолданылады.
8) Мән қайтармайтын функцияларда return инструкциясын қолданбауға болады.
4. 2 мысал: екі сан қабылдайтын және екеуінің үлкен мәнін қайтаратын max() функциясын жазу.
def max(a, b):
if a > b:
return a
else:
return b
print(max(3, 5))
print(max(5, 3))
print(max(int(input()), int(input())))
3 мысал: үш сан қабылдайтын және олардың ішінен үлкен мәнді қайтаратын max3() функциясын
жазу.
def max3(a, b, c):
return max(max(a, b), c)
print(max3(3, 5, 4))
Функциялар
Нәтижесі:
5
5
62
34
62
Нәтижесі:
5
5. Пайтон тілінде аргументтердін айнымаы сандарын қабылдайтын және олардың үлкенін өайтаратын
стандартты max() функциясы бар. Программада бұл функция қолдану мысалы:
def max(*a):
res = a[0]
for val in a[1:]:
if val > res:
res = val
return res
print(max(3, 5, 4))
Осы функцияға жіберілетін барлық параметрлер, функцияны жариялау жолында белгіленген
жұлдызша а атты бір кортежге жиналады.
Кортеж (tuple) – бұл өзгермейтін объектілер тізімі. Кортеждер тізімдермен ұқсас болып келеді, бірақ
бір ерекшелігі ол – кортеж элементтерін өзгертуге болмайды және оларды тізімдегідей тік жақшаға
емес дөңгелек жақшға жазады.
Функциялар
Нәтижесі:
5
6. Кортеж қарапайым, үтірмен бөлінген элементтерді меншіктеу арқылы құрылады. Немесе оларды
жақшаға алып жзуға болады. Мысалы:
tup1 =('physics', 'chemistry', 1997, 2000)
tup2 =(1, 2, 3, 4, 5)
tup3 ="a", "b", "c", "d"
Бос кортеж боc жақшалармен көрсетіледі:
tup1 =()
Бір элементтен тұратын кортжді көрсететін болсақ, онда жазылған элементтен кейін де міндетті
түрде үтір қойылады:
tup1 =(50,)
print (tup1[0])
Функциялар
7. Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық
(глобалды) деп аталады.
Мысалы:
def f():
print(a)
a = 1
f()
Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы
иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін
айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады.
Жергілікті және жаһандық айнымалылар
8. Функцияның сыртында жарияланған, және функция ішінде қол жетімді айнымалылар жаһандық
(глобалды) деп аталады.
Мысалы:
def f():
print(a)
a = 1
f()
Мұндағы: а айнымалысына 1 мәні меншіктелінеді, және f функция жарияланғанша бұл айнымалы
иницалданбаса да f() функциясы осы мәнді баспаға шығарады. f() функцияны шақырғанға деййін
айнымалыға мән меншіктеледі, сондықтан f() функциясы оны экранға шығары алады.
Жергілікті және жаһандық айнымалылар
9. Егер айнымалыны функция ішінде жарияласа, онда оны функциядан тыс жерде қолданыла алмайды.
Бұндай айнымалыларды жергілікті (локалды) де атайды.
Мысалы:
def f():
a = 1
f()
print(a)
Нәтижесінде NameError: name 'a' is not defined қатесін аламыз. Осындай анымалылар функция
сыртына шыққанда қол жетпес болады.
Егер жаһандық айнымалының мәнін функция ішінде өзгертетсе, онда:
1 және 0 сандары шығарылады. Функция ішінде а мәні өзгерсе де, функция
сыртында ол өзгермей қалды. Бұл жаһандық айнымалыларды функция ішінен
кез-келген өзгертулерден «сақтау» мақсатында жазылған.
Жергілікті және жаһандық айнымалылар
def f():
a = 1
print(a)
a = 1
f()
print(a)
10. Егер функция циклдан і айнымалысы арқылы шақырылса, және де бұл функцияда да циклды
ұйымдстыру үшін і айнымалысы қолданылса, онда олар әр түрлі болу керек.
def factorial(n):
res = 1
for i in range(1, n + 1):
res *= i
return res
for i in range(1, 6):
print(i, ' ! = ', factorial(i), sep='')
қатесін аламыз. Осындай анымалылар функция сыртына шыққанда қол жетпес болады.
Рекурсия
Нәтижесі:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
11. Функция жаһандық айнымалының мәнін өзгерту үшін, осы айнымалыны функция ішінде жаһандық
айнымалы ретінде, global кілттік сөзі көмегімен жариялау керек:
def f( ):
global a
a=1
print(a)
a=0
f( )
print(a)
Нәтижесі a айнымалысы жаһандық ретінде жарияланған, және оның функция ішіндегі өзгеруі,
айнымалының функциядан тыс жерде де қол жетімді болатынына көрсетеді.
Ескерту: Жаһандық айнымалыны функция ішінде өзгертпегені жақсы.
Жергілікті және жаһандық айнымалылар
Нәтижесі:
1
1
12. # Кодтын басында жазылған бөлігін, бір программадан екінші программаға көшіріп жаза беруге
болады:
def factorial(n):
res = 1
for i in range(2, n + 1):
res *= i
return res
n = int(input())
f = factorial(n)
print(n, '! = ', f)
# әрі қарай f айнымалысымен кез-келген әркеттерді орындауға болады.
Жергілікті және жаһандық айнымалылар
Нәтижесі:
5! = 120
13. Рекурсия дегеніміз – бұл өзін-өзі шақыратын функция, ал рекурсияны қолданатын функция
рекурсивті функция деп аталады.
Рекурсия көмегімен n! есептеп көрейік:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
Есакерту: Рекурсивті функция құру кезінде рекурсияның аяқталуын міндетті түрде жариялау керек,
әйтпесе шексіз функция болуы мүмкін. Шексіздік рекурсивті функцияны жариялаудын екі түрі:
1) Рекурсиядан шығуды дұрыс емес жариялау. Мысалы, егер программада факториалды есептеу
кезінде if n == 0 шартын жазбасақ, онда factorial(0) factorial(-1)-ді шақырады, ал factorial(-1)
factorial(-2)-ні шақырады және т.с.с.
2) Дұрыс емес параметрлі рекурсивті функцияны шақыру. Мысалы, егер factorial(n) функциясы
factorial(n) шақырса, онда тура солай сияқты шексіз функция пайда болады.
Рекурсия
Нәтижесі:
120
14. Мысалы, Фибоначчидін n-ші санын екі түрімен есептеу.
Циклды қолданып n-ші санын есептеу:
Алгоритмі:
1. Тізбектін алғашқы екі (fib1 және fib2) мәнін енгізу.
2. Анықталатын элементтін нөмірін енгізу (n)
3. Төмене көрсетілген әрекеттерді екі бірлікке азайтылған (өйткені fib1 және fib2 белгілі) n рет
қайталау. 3.1. fib1 және fib2 қосу, және оны үшінші (fib_sum) айнымалыға меншіктеу.
3.2. Алғашқы мәндерін ауыстыру керек: fib1=fib2, ал fib2=fib_sum
Рекурсияны қолданып n-ші санын есептеу:
Алгоритмі:
1. Егер n=1 немесе n=2, онда шақырылатын тармағына бір бірлікті қайтару (себебі, Фибоначчи
тізбегінің бірінші және екінші элементтері бірге тең).
2. Қалған басқа жағдайларды сол функцияны n-1 және n-2 аргументімен қайта шақыру. Екі шақырудың
нәтижесін қосып, оны программанын шақырылатын тармаққа қайтару керек.
15. Python тілінде жазылуы:
Тексеріс үшін Фибоначчи сандары: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,
4181, 6765, 10946,…
fib1 = 1
fib2 = 1
n = input (“Фибоначчидін қай n-ші санын
есептейсіз? ")
n = int(n) # бүтір санға түрлендіру
i = 2
while i < n:
fib_sum = fib2 + fib1
fib1 = fib2
fib2 = fib_sum
i += 1
print (fib_sum)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))